VBScript-runtimefout (type komt niet overeen) wanneer u een numerieke vergelijking uitvoert op een adNumeric-veldtype

Dit artikel helpt u bij het oplossen van een fout (type komt niet overeen) die optreedt wanneer u Visual Basic Scripting Edition (VBScript) gebruikt om een numerieke vergelijking of berekening uit te voeren op een adNumeric veldtype (131).

Oorspronkelijke productversie: Visual Basic Script
Oorspronkelijk KB-nummer: 306916

Symptomen

Wanneer u VBScript gebruikt om een numerieke vergelijking of berekening uit te voeren op een adNumeric veldtype (131), ontvangt u mogelijk de volgende foutberichten:

  • Foutbericht 1

    Microsoft VBScript-runtimefout '800a000d'
    Type komt niet overeen

  • Foutbericht 2

    Microsoft VBScript-runtimefout '800a01ca'
    Variabele maakt gebruik van een Automation-type dat niet wordt ondersteund in VBScript

Oorzaak

Deze foutberichten treden op omdat VBScript waarden niet correct kan converteren adNumeric naar een geldig numeriek type. Dit is zo ontworpen.

Oplossing

U kunt een van de volgende twee mogelijke tijdelijke oplossingen gebruiken:

  • Gebruik de CDbl of CInt functie om het adNumeric veld te converteren.
  • Gebruik JScript, dat dit gedrag niet vertoont.

U kunt dit gedrag reproduceren op een ASP-pagina (Active Server Pages) of via een eenvoudig Visual Basic Script-bestand (.vbs). De volgende stappen laten zien hoe u het probleem kunt reproduceren in een eenvoudig VBS-bestand.

Stap 1 om het gedrag te reproduceren: de Oracle-tabel maken

Voer het volgende script uit op uw Oracle-server om de voorbeeldtabel te maken:

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;

Stap 2 om het gedrag te reproduceren: het VBS-bestand maken

  1. Maak in Kladblok een nieuw tekstdocument met de naam Test.vbs en plak de volgende code in de 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. Wijzig de verbindingsreeks zodat deze verwijst naar uw Oracle-server en een geldige gebruikersnaam en een geldig wachtwoord opgeven.

  3. Sla Test.vbs op uw bureaublad op. U ontvangt een waarschuwing dat het bestand instabiel wordt als u de extensie wijzigt. Klik op OK om door te gaan. Als u deze waarschuwing niet ziet, wilt u er mogelijk voor zorgen dat u extensies voor bekende bestandstypen weergeeft.

  4. Sluit Test.vbs.

  5. Dubbelklik op Test.vbs op uw bureaublad om de code uit te voeren. U ontvangt het foutbericht Type komt niet overeen .

  6. Verwijder opmerkingen bij de volgende coderegel, waarmee het adNumeric veld wordt geconverteerd naar een dubbel gegevenstype:

    MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
    
  7. Markeer de volgende regel code als commentaar:

    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    
  8. Sluit Test.vbs en sla deze op.

  9. Dubbelklik op Test.vbs op uw bureaublad om de code opnieuw uit te voeren. Vervolgens ontvangt u twee berichtvakken en geen foutberichten.