Condividi tramite


Errore di runtime VBScript (Tipo non corrispondente) quando si esegue un confronto numerico su un tipo di campo adNumeric

Questo articolo consente di risolvere l'errore di mancata corrispondenza del tipo che si verifica quando si utilizza Visual Basic Scripting Edition (VBScript) per eseguire un confronto numerico o un calcolo su un tipo di campo adNumeric (131).

Versione originale del prodotto: Visual Basic Script
Numero KB originale: 306916

Sintomi

Quando si utilizza VBScript per eseguire un confronto numerico o un calcolo su un tipo di campo adNumeric (131), possono essere visualizzati i seguenti messaggi di errore:

  • Messaggio di errore 1

    Errore di runtime di Microsoft VBScript '800a000d'
    Tipo non corrispondente

  • Messaggio di errore 2

    Errore di runtime di Microsoft VBScript '800a01ca'
    La variabile utilizza un tipo di automazione non supportato in VBScript

Causa

Questi messaggi di errore si verificano in quanto VBScript non può convertire correttamente i valori adNumeric a un tipo numerico valido. Questo comportamento è predefinito.

Risoluzione

È possibile utilizzare una delle due possibili soluzioni alternative seguenti:

  • Utilizzare la funzione CDbl o CInt per convertire il campo adNumeric.
  • Utilizzare JScript, che non presenta questo comportamento.

È possibile riprodurre questo comportamento in una pagina ASP (Active Server Pages) o tramite un semplice file Visual Basic Script (.vbs). I passaggi seguenti illustrano come riprodurre il problema in un semplice file .vbs.

Passaggio 1 per riprodurre il comportamento: Creare la tabella Oracle

Eseguire il seguente script sul server Oracle per creare la tabella di esempio:

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;

Passaggio 2 per riprodurre il comportamento: Creare il file VBS

  1. In Blocco note, creare un nuovo documento di testo denominato Test.vbs e incollare il codice seguente in 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. Modificare la stringa di connessione in modo che punti al server Oracle e fornisca un nome utente e una password validi.

  3. Salvare Test.vbs sul desktop. Verrà generato un avviso per segnalare che la modifica dell'estensione potrebbe rendere il file instabile. Fare clic su OK per continuare. Se l'avviso non viene visualizzato, assicurarsi che le estensioni per i tipi di file conosciuti siano visibili.

  4. Chiudere Test.vbs.

  5. Sul desktop, fare doppio clic su Test.vbs per eseguire il codice. Viene visualizzato il messaggio di errore Tipo non corrispondente.

  6. Rimuovere il commento dalla seguente riga di codice, che converte il campo adNumeric in un tipo di dati Double:

    MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
    
  7. Commentare la seguente riga di codice:

    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    
  8. Chiudere e salvare Test.vbs.

  9. Sul desktop, fai doppio clic su Test.vbs per eseguire nuovamente il codice. Verranno visualizzate due finestre di messaggio e nessun messaggio di errore.