Freigeben über


VBScript-Laufzeitfehler (Typkonflikt) beim Durchführen eines numerischen Vergleichs für einen adNumeric-Feldtyp

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 auf einem adNumeric (131) Feldtyp durchzuführen.

Originalproduktversion: Visual Basic Script
Ursprüngliche KB-Nummer: 306916

Symptome

Wenn Sie VBScript verwenden, um einen numerischen Vergleich oder eine Berechnung auf einem adNumeric (131) Feldtyp durchzuführen, erhalten Sie möglicherweise die folgenden Fehlermeldungen:

  • Fehlermeldung 1

    Microsoft VBScript-Laufzeitfehler '800a000d'
    Typenkonflikt

  • Fehlermeldung 2

    Microsoft VBScript-Laufzeitfehler '800a01ca'
    Variable verwendet einen Automatisierungstyp, der in VBScript nicht unterstützt wird

Ursache

Diese Fehlermeldungen treten auf, weil VBScript adNumeric-Werte nicht richtig in einen gültigen numerischen Typ konvertieren kann. Dieses Verhalten ist beabsichtigt.

Lösung

Sie können eine der folgenden zwei möglichen Problemumgehungen verwenden:

  • Verwenden Sie die Funktion CDbl oder CInt zum Umwandeln des Felds adNumeric.
  • Verwenden Sie JScript, das dieses Verhalten nicht zeigt.

Sie können dieses Verhalten in einer Active Server Pages (ASP)-Seite oder über eine einfache Visual Basic Script (.vbs)-Datei reproduzieren. Die folgenden Schritte veranschaulichen, wie das Problem in einer einfachen .vbs-Datei reproduziert werden kann.

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

  1. Erstellen Sie in Notepad ein neues Textdokument mit dem Namen Test.vbs, und fügen Sie den folgenden Code 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
    
  2. Ändern Sie die Verbindungszeichenfolge so, dass sie auf Ihren Oracle-Server verweist und einen gültigen Benutzernamen und ein gültiges Kennwort bereitstellt.

  3. Speichern Sie Test.vbs auf Ihrem Desktop. Sie sollten eine Warnung erhalten, dass das Ändern der Erweiterung die Datei instabil machen kann. Klicken Sie zum Fortsetzen des Vorgangs auf OK . Wenn diese Warnung nicht angezeigt wird, sollten Sie sicherstellen, dass Erweiterungen für bekannte Dateitypen angezeigt werden.

  4. Schließen Sie Test.vbs.

  5. Doppelklicken Sie auf Ihrem Desktop auf Test.vbs, um den Code auszuführen. Die Fehlermeldung wegen eines Typkonflikts wird angezeigt:

  6. Entkommentieren Sie die folgende Codezeile, die das Feld adNumeric in einen Double-Datentyp konvertiert:

    MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
    
  7. Kommentieren Sie die folgende Codezeile aus:

    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    
  8. Speichern und schließen Sie Test.vbs.

  9. Doppelklicken Sie auf Ihrem Desktop auf Test.vbs, um den Code erneut auszuführen. Sie erhalten jetzt zwei Meldungsfelder und keine Fehlermeldungen.