0

我有以下 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 "

有人有想法么??

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

现在这变得很愚蠢:

我将最后 2 行更改为以下 3 行:

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

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

其他任何人都经历过仅仅因为你使用过变量而失去价值的经历吗?

4

1 回答 1

2

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

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

MsgBox相反,它不能对一个对象做有意义的事情,所以它调用那个对象(Field对象)的默认属性来显示它。默认属性是.ValueNull

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

您可能希望明确提出您的要求:

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

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

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

set hemisphereResult = CreateObject("ADODB.Recordset")
hemisphereResult.CursorLocation = 3 'adUseClient
hemisphereResult.open "select ...", hemisphereConnection
于 2013-06-27T23:59:33.837 回答