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"
    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 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 CDbl Oder-Funktion CInt , um das adNumeric Feld 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

  1. 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
    
  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 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.

  4. Schließen Sie Test.vbs.

  5. Doppelklicken Sie auf dem Desktop auf Test.vbs , um den Code auszuführen. Sie erhalten die Fehlermeldung "Typkonflikt" .

  6. Entfernen Sie dieKommentierung der folgenden Codezeile, wodurch das adNumeric Feld in einen doppelten Datentyp konvertiert wird:

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

    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    
  8. Schließen und speichern SieTest.vbs.

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