Результат базы данных передается как нуль, если он не прочитан

Set rslistings = my_conn.Execute(strSQL)

Do while NOT rslistings.Eof
    description = strip(rslistings("description"))
rslistings.MoveNext
loop

В полосе передается NULL. Однако, если я подключаю отладчик и проверяю содержимое rslistings("description"), то фактический объект Field передается через

Это довольно старый код asp, но он работает на IIS6, но не на IIS7.

ИЗМЕНИТЬ Это происходит только в поле "описание" с текстовым типом (база данных MySQL).

полоса мало что делает:

If NOT IsNull(passedinvalue) Then 
    // do something
Else
    // do something else

Если я вызываю полосу как полосу (rs («описание»)), она никогда не будет нулевой, поскольку объект Field передается. Если я назначаю ему другое значение, затем передаю его (например, полоса (mynewvar)) тогда правильное значение передается.

Изменить - биты базы данных, как указано ниже

Set my_conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
my_conn.Open "DSN=mydb"

SQL

Set rs = my_conn.Execute("SELECT description FROM table")

person Paul    schedule 16.03.2011    source источник
comment
Это происходит только в поле описания с текстовым типом (база данных MySQL).   -  person Paul    schedule 16.03.2011
comment
Можете ли вы также опубликовать код strip Sub / Function?   -  person stealthyninja    schedule 16.03.2011
comment
я добавил функцию полосы, не так много происходит   -  person Paul    schedule 16.03.2011
comment
Вы пробовали: description = strip(rslistings("description") & "")?   -  person Shadow Wizard Wearing Mask V2    schedule 17.03.2011
comment
да, это работает, но на самом деле это не объясняет, почему существующий код не работает...   -  person Paul    schedule 21.03.2011


Ответы (2)


Коллекция полей является членом объекта Recordset по умолчанию.

то же самое относится и к свойству value для объекта Field.

поэтому следующие два оператора кода эквивалентны.

Debug.Print objRs.Fields.Item(0)  ' Both statements print 
Debug.Print objRs(0)              '  the Value of Item(0).

это разница, если вы присваиваете значение переменной или используете его в качестве параметра в функции.

person ulluoink    schedule 22.03.2011

@Paul: Если strip не проверяет, является ли description NULL, прежде чем работать над этим, вы можете сделать это -

Do while NOT rslistings.Eof
    description = rslistings("description")

    If NOT IsNull(description) Then 
        description = strip(description)
    Else
        description = "" ' or you could have description = " " 
                         ' if you output to screen later on
    End If
rslistings.MoveNext
loop
person stealthyninja    schedule 16.03.2011
comment
Ах, вы на самом деле столкнулись с моей проблемой. Первое, что делает полоса, это проверяет значение null (IF NOT ISNULL(passedinvalue)). Однако передача rslistings(description) означает, что переданное значение никогда не равно нулю, поскольку кажется, что оно передается в объекте Field, а не в значении. Передача в rslistings(description). Значение передано правильно, но я не могу этого сделать (столько кода нужно изменить!) - person Paul; 16.03.2011
comment
@Paul: Это действительно странно ... не могли бы вы опубликовать, как вы создаете и устанавливаете my_conn, используемую строку подключения и выполняемый SQL-запрос? - person stealthyninja; 18.03.2011