對 adNumeric 欄位類型執行數值比較時出現 VBScript 執行階段錯誤(類型不相符)

本文可幫助您解決使用 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 檔案

  1. 在記事本中,建立名為 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
    
  2. 修改連線字串,使其指向 Oracle 伺服器並提供有效的使用者名稱和密碼。

  3. Test.vbs 儲存到桌面。 您應該會收到警告,指出變更副檔名可能會使檔案不穩定。 按一下 [確定] 繼續進行。 如果沒有看到此警告,可能需要確認顯示的是已知檔案類型的副檔名。

  4. 關閉 Test.vbs

  5. 在桌面上,按兩下 Test.vbs 執行程式碼。 您收到類型不相符錯誤訊息。

  6. 取消註解以下幾行程式碼,這會將 adNumeric 欄位轉換為雙精確度資料類型:

    MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
    
  7. 註解以下幾行程式碼:

    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    
  8. 關閉並儲存 Test.vbs

  9. 在桌面上,按兩下 Test.vbs 以再次執行程式碼,您會收到兩個訊息方塊並且沒有錯誤訊息。