この記事は、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
値を有効な数値型に適切に変換できないために表示されます。 この動作は仕様です。
解決方法
次の 2 つの可能な回避策のいずれかを使用できます。
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 をデスクトップに保存します。 拡張子を変更するとファイルが不安定になる可能性があるという警告が表示されます。 OK をクリックして続行します。 この警告が表示されない場合は、既知のファイル型の拡張子が表示されていることを確認することをお勧めします。
Test.vbs を閉じます。
デスクトップで、Test.vbs をダブルクリックしてコードを実行します。 型の不一致エラー メッセージが表示されます。
adNumeric
フィールドを倍精度浮動小数点データ型に変換する次のコード行のコメントを解除します。MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
次のコード行にコメントします。
MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
Test.vbs を閉じて保存します。
デスクトップで、Test.vbs をダブルクリックしてコードを再度実行すると、2 つのメッセージ ボックスが表示され、エラー メッセージは表示されません。