变量失去价值

时间:2013-06-27 23:50:02

标签: mysql database vbscript adodb mysql-odbc-connector

我有以下vbscript代码:

hemisphereConnectionString = "Driver={MySQL ODBC 5.1 Driver};" & _
                             "Server=" & hemisphereServer & ";" & _
                             "Database=" & hemisphereDatabase & ";" & _
                             "User=" & hemisphereUsername & ";" & _
                             "Password=" & hemispherePassword & ";"

Set hemisphereConnection = CreateObject("adodb.connection")
hemisphereConnection.Open(hemisphereConnectionString)

hem_sql = "SELECT * FROM hei_vision_update WHERE id IN (SELECT MAX(id) FROM hei_vision_update WHERE done = 'N' GROUP BY name)"

Set hemisphereResult = hemisphereConnection.Execute(hem_sql)

if hemisphereResult.EOF = false then
    hemisphereResult.MoveFirst()
end if
msgbox isnull(hemisphereResult("home_publish").value)
msgbox hemisphereResult("home_publish").value

它是一个更大的脚本的一部分(太大了,不能在这里发布,但这些是关键线) 我的消息框显示为false(即该字段的值不为null),下一个消息框崩溃,说“无效使用Null”

任何人有任何想法吗?

我已将代码修改为上述内容,这就是全部(除了服务器和密码详细信息)。现在没有OERN / OEG0线。我从数据库获取的行在home_publish字段中有一个'Y',因此显示false的第一个消息框是正确的。只是显示“无效使用空”的第二个是神秘的。我开始怀疑MySQL驱动程序是否存在问题?

现在这变得愚蠢了:

我将最后两行更改为这三行:

msgbox hemisphereResult("home_publish").value
msgbox isnull(hemisphereResult("home_publish").value)
msgbox hemisphereResult("home_publish").value

第一个消息框显示我的值'Y' 现在第二个消息框显示为true(显然不是) 最后,我的第三个消息框给出了“无效使用null”错误。

其他任何人因为使用过它们而经历过失去价值的变量?

1 个答案:

答案 0 :(得分:2)

如果hemisphereResultADODB.Recordset,则hemisphereResult("home_publish")ADODB.Field,此时会发生以下情况。

IsNull不会尝试进一步调查传递的对象并返回False,因为字段本身作为记录集中的对象存在。

相反,

MsgBox不能对对象做有意义的事情,因此它调用该对象的默认属性(Field对象)以显示它。默认属性为.Value Null

尽管IsNullMsgBox的参数在代码中看起来相同,但它们实际上并不相同。

您可能希望明确要求:

msgbox isnull(hemisphereResult("home_publish").value)

虽然上述情况属实,但您可能也受到了MySQL错误的影响(4483142385等。)

建议的解决方法是使用客户端游标:

set hemisphereResult = CreateObject("ADODB.Recordset")
hemisphereResult.CursorLocation = 3 'adUseClient
hemisphereResult.open "select ...", hemisphereConnection