VBScript-Laufzeitfehler (Typkonflikt), wenn Sie einen numerischen Vergleich für einen adNumerischen Feldtyp durchführen
Dieser Artikel hilft Ihnen, einen Fehler (Typkonflikt) zu beheben, der auftritt, wenn Sie Visual Basic Scripting Edition (VBScript) verwenden, um einen numerischen Vergleich oder eine Berechnung für einen adNumeric Feldtyp (131) durchzuführen.
Originalversion des Produkts: Visual Basic-Skript
Ursprüngliche KB-Nummer: 306916
Problembeschreibung
Wenn Sie VBScript zum Ausführen eines numerischen Vergleichs oder einer Berechnung für einen adNumeric Feldtyp (131) verwenden, werden möglicherweise die folgenden Fehlermeldungen angezeigt:
Fehlermeldung 1
Microsoft VBScript-Laufzeitfehler "800a000d"
TypenkonfliktFehlermeldung 2
Microsoft VBScript-Laufzeitfehler '800a01ca'
Variable verwendet einen Automatisierungstyp, der in VBScript nicht unterstützt wird
Ursache
Diese Fehlermeldungen treten auf, weil VBScript Werte nicht ordnungsgemäß in einen gültigen numerischen Typ konvertieren adNumeric kann. Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Lösung
Sie können eine der folgenden beiden möglichen Problemumgehungen verwenden:
- Verwenden Sie die
CDblOder-FunktionCInt, um dasadNumericFeld zu konvertieren. - Verwenden Sie JScript, das dieses Verhalten nicht aufweist.
Sie können dieses Verhalten auf einer ASP-Seite (Active Server Pages) oder über eine einfache Visual Basic Script-Datei (VBS) reproduzieren. Die folgenden Schritte veranschaulichen, wie Sie das Problem in einer einfachen VBS-Datei reproduzieren.
Schritt 1 zum Reproduzieren des Verhaltens: Erstellen der Oracle-Tabelle
Führen Sie das folgende Skript auf Ihrem Oracle-Server aus, um die Beispieltabelle zu erstellen:
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;
Schritt 2 zum Reproduzieren des Verhaltens: Erstellen der VBS-Datei
Erstellen Sie in Editor ein neues Textdokument mit dem Namen Test.vbs, und fügen Sie den folgenden Code in den Test ein.
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Ändern Sie die Verbindungszeichenfolge so, dass sie auf Ihren Oracle-Server verweist und einen gültigen Benutzernamen und ein gültiges Kennwort bereitstellt.
Speichern Sie Test.vbs auf Ihrem Desktop. Sie sollten eine Warnung erhalten, dass eine Änderung der Erweiterung die Datei möglicherweise instabil macht. Klicken Sie auf OK, um den Vorgang fortzusetzen. Wenn diese Warnung nicht angezeigt wird, sollten Sie sicherstellen, dass Erweiterungen für bekannte Dateitypen angezeigt werden.
Schließen Sie Test.vbs.
Doppelklicken Sie auf dem Desktop auf Test.vbs , um den Code auszuführen. Sie erhalten die Fehlermeldung "Typkonflikt" .
Entfernen Sie dieKommentierung der folgenden Codezeile, wodurch das
adNumericFeld in einen doppelten Datentyp konvertiert wird:MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100Kommentieren Sie die folgende Codezeile:
MsgBox "Numeric field * 100 = " & oRS("CustID") * 100Schließen und speichern SieTest.vbs.
Doppelklicken Sie auf dem Desktop auf Test.vbs , um den Code erneut auszuführen. Dann erhalten Sie zwei Meldungsfelder und keine Fehlermeldungen.