本文帮助你解决使用 Visual Basic Scripting Edition(VBScript) 对 adNumeric
(131) 字段类型执行数字比较或计算时出现的错误(类型不匹配)。
原始产品版本: Visual Basic 脚本
原始 KB 数: 306916
现象
当使用 VBScript 对 adNumeric
(131) 字段类型执行数字比较或计算时,可能会收到以下错误消息:
错误消息 1
Microsoft VBScript 运行时错误 '800a000d'
类型不匹配错误消息 2
Microsoft VBScript 运行时错误 '800a01ca'
变量使用了 VBScript 不支持的自动化类型
原因
出现这些错误消息是因为 VBScript 无法正确转换 adNumeric
值转换为有效的数字类型。 此为有意行为。
解决方法
您可以使用以下两种可能的解决方法之一:
- 使用
CDbl
或者CInt
函数来转换adNumeric
字段。 - 使用 JScript,它不会表现出这种行为。
您可以在 Active Server Pages (ASP) 页中或通过简单的 Visual Basic 脚本 (.vbs) 文件复制此行为。 以下步骤演示了如何在简单的 .vbs 文件中复制该问题。
重现行为的步骤 1:创建 Oracle 表
在您的 Oracle 服务器上运行以下脚本以创建示例表:
DROP TABLE Cust;
CREATE TABLE Cust (CustID NUMBER(22,6) PRIMARY KEY, Name VARCHAR2(50));
INSERT INTO Cust VALUES(222,'Kent');
INSERT INTO Cust VALUES(333,'Sally');
COMMIT;
重现行为的步骤 2:创建 VBS 文件
在记事本中,创建一个名为 Test.vbs 的新文本文档, 并将以下代码粘贴到 test。
Set oConn = CreateObject("ADODB.Connection") oConn.open "Provider=MSDAORA;user id=User;" & _ "password=password;data source=Oracle816Server;" set oRS = oConn.Execute("Select CustID FROM Cust") MsgBox "Numeric field type is 131." & vbcrlf & _ "Field Type = " & ors.fields("CustID").type MsgBox "Numeric field * 100 = " & oRS("CustID") * 100 MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
修改连接字符串,使其指向您的 Oracle 服务器并提供有效的用户名和密码。
将 Test.vbs 保存到您的桌面。 您会收到一条警告,更改扩展名可能会使文件不稳定。 单击 “确定” 继续。 如果您没有看到此警告,您需要确保显示的是已知文件类型的扩展名。
关闭 Test.vbs。
在桌面上,双击 Test.vbs 以运行代码。 您会收到 类型不匹配 的错误信息。
取消对以下代码行的注释,该代码将
adNumeric
字段转换为双数据类型:MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
注释以下代码行:
MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
关闭并保存 Test.vbs。
在桌面上,双击 Test.vbs 再次运行代码,然后您会收到两个消息框并且没有错误消息。