Partager via


Erreur d’exécution de VBScript (incompatibilité de type) lorsque vous effectuez une comparaison numérique sur un type de champ adNumeric

Cet article vous aide à résoudre une erreur (incompatibilité de type) qui se produit lorsque vous utilisez Visual Basic Scripting Edition (VBScript) pour effectuer un calcul ou une comparaison numérique sur un type de champ adNumeric (131).

Version du produit d’origine : Script Visual Basic
Numéro de base de connaissances d’origine : 306916

Symptômes

Lorsque vous utilisez VBScript pour effectuer une comparaison ou un calcul numérique sur un type de champ adNumeric (131), les messages d’erreur suivants peuvent apparaître :

  • Message d’erreur 1

    Erreur d’exécution Microsoft VBScript « 800a000d »
    Incompatibilité de type

  • Message d’erreur 2

    Erreur d’exécution Microsoft VBScript « 800a01ca »
    La variable utilise un type d’automatisation non pris en charge dans VBScript

Cause

Ces messages d’erreur s’affichent car VBScript ne peut pas convertir correctement les valeurs adNumeric en type numérique valide. Ce comportement est fait exprès.

Résolution

Vous pouvez utiliser l’une des deux solutions de contournement suivantes :

  • Utilisez la fonction CDbl ou CInt pour convertir le champ adNumeric.
  • Utilisez JScript, qui ne présente pas ce comportement.

Vous pouvez reproduire ce comportement dans une page Active Server Pages (ASP) ou via un fichier Visual Basic Script (.vbs) simple. Les étapes suivantes montrent comment reproduire le problème dans un fichier .vbs simple.

Étape 1 pour reproduire le comportement : Créer la table Oracle

Exécutez le script suivant sur votre serveur Oracle pour créer l’exemple de table :

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;

Étape 2 pour reproduire le comportement : Créer le fichier VBS

  1. Dans le Bloc-notes, créez un document texte nommé Test.vbs, puis collez le code suivant dans le 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. Modifiez la chaîne de connexion afin qu’elle pointe vers votre serveur Oracle et fournisse un nom d’utilisateur ainsi qu’un mot de passe valides.

  3. Enregistrez Test.vbs sur votre bureau. Un avertissement doit apparaître, indiquant que la modification de l’extension peut rendre le fichier instable. Pour continuer, cliquez sur OK . Si cet avertissement ne s’affiche pas, assurez-vous que vous affichez les extensions pour les types de fichiers connus.

  4. Fermez Test.vbs.

  5. Sur votre bureau, double-cliquez sur Test.vbs pour exécuter le code. Le message d’erreur Incompatibilité de type s’affiche.

  6. Supprimez les marques de commentaire de la ligne de code suivante, qui convertit le champ adNumeric en type de données double :

    MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
    
  7. Commentez la ligne de code suivante :

    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    
  8. Enregistrez et fermez Test.vbs.

  9. Sur votre bureau, double-cliquez sur Test.vbs pour exécuter à nouveau le code. Deux boîtes de message s’affichent, mais aucun message d’erreur n’apparaît.