本文可幫助您解決使用 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 以再次執行程式碼,您會收到兩個訊息方塊並且沒有錯誤訊息。