我有以下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”错误。
其他任何人因为使用过它们而经历过失去价值的变量?
答案 0 :(得分:2)
如果hemisphereResult
为ADODB.Recordset
,则hemisphereResult("home_publish")
为ADODB.Field
,此时会发生以下情况。
IsNull
不会尝试进一步调查传递的对象并返回False
,因为字段本身作为记录集中的对象存在。
MsgBox
不能对对象做有意义的事情,因此它调用该对象的默认属性(Field
对象)以显示它。默认属性为.Value
, 为Null
。
尽管IsNull
和MsgBox
的参数在代码中看起来相同,但它们实际上并不相同。
您可能希望明确要求:
msgbox isnull(hemisphereResult("home_publish").value)
虽然上述情况属实,但您可能也受到了MySQL错误的影响(44831,42385等。)
建议的解决方法是使用客户端游标:
set hemisphereResult = CreateObject("ADODB.Recordset")
hemisphereResult.CursorLocation = 3 'adUseClient
hemisphereResult.open "select ...", hemisphereConnection