本文有助于解决使用 Visual Basic Scripting Edition (VBScript) 对 (131) 字段类型执行数值比较或计算
adNumeric
时出现的错误 (类型不匹配) 。
原始产品版本:
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 Script (.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的新文本文档,并将以下代码粘贴到测试中。
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 再次运行代码,然后收到两个消息框,没有错误消息。