Compartir a través de


Error de tiempo de ejecución de VBScript (no coinciden los tipos) cuando realiza una comparación numérica en un tipo de campo adNumeric

Este artículo le ayuda a resolver un error (de coincidencia de tipos) que se produce cuando utiliza Visual Basic Scripting Edition (VBScript) para realizar una comparación numérica o un cálculo en un adNumeric (131) tipo de campo.

Versión original del producto: Script de Visual Basic
Número de KB original: 306916

Síntomas

Cuando utiliza VBScript para realizar una comparación numérica o un cálculo en un tipo de campo adNumeric (131), puede recibir los siguientes mensajes de error:

  • Mensaje de error 1

    Error de tiempo de ejecución de Microsoft VBScript “800a000d”
    Error de coincidencia de tipos

  • Mensaje de error 2

    Error de tiempo de ejecución de Microsoft VBScript “800a01ca”
    La variable usa un tipo de automatización no compatible con VBScript

Causa

Estos mensajes de error se producen porque VBScript no puede convertir correctamente valores adNumeric a un tipo numérico válido. Este comportamiento se debe al diseño.

Solución

Puede utilizar una de las siguientes dos posibles soluciones:

  • Utilizar la función CDbl o CInt para convertir el campo adNumeric.
  • Utilizar JScript, que no presenta este comportamiento.

Puede reproducir este comportamiento en una página de páginas Active Server (ASP) o mediante un archivo simple de Visual Basic Script (.vbs). Los siguientes pasos demuestran cómo reproducir el problema en un archivo .vbs simple.

Paso 1 para reproducir el comportamiento: Creación de la tabla de Oracle

Ejecute el siguiente script en su servidor Oracle para crear la tabla de muestra:

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;

Paso 2 para reproducir el comportamiento: Crear el archivo VBS

  1. En el Bloc de notas, cree un nuevo documento de texto llamado Test.vbs y pegue el siguiente código en el 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. Modifique la cadena de conexión para que apunte a su servidor Oracle y proporcione un nombre de usuario y una contraseña válidos.

  3. Guarde Test.vbs en su escritorio. Debería recibir una advertencia de que cambiar la extensión puede hacer que el archivo sea inestable. Haga clic en Aceptar para continuar. Si no ve esta advertencia, es posible que desee asegurarse de que está mostrando extensiones para tipos de archivo conocidos.

  4. Cierre Test.vbs.

  5. En su escritorio, haga doble clic en Test.vbs para ejecutar el código. Recibe el siguiente mensaje de error de coincidencia de tipos.

  6. Quite el comentario de la siguiente línea de código, que convierte el campo adNumeric a un tipo de datos doble:

    MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100
    
  7. Comente la siguiente línea de código:

    MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
    
  8. Cierre y guarde Test.vbs.

  9. En su escritorio, haga doble clic en Test.vbs para ejecutar el código de nuevo. Recibirá dos cuadros de mensaje y ningún mensaje de error.