Error en tiempo de ejecución de VBScript (error de coincidencia de tipo) al realizar una comparación numérica en un tipo de campo adNumeric
Este artículo le ayuda a resolver un error (error de coincidencia de tipo) que se produce al usar Visual Basic Scripting Edition (VBScript) para realizar una comparación numérica o un cálculo en un adNumeric tipo de campo (131).
Versión original del producto: script de Visual Basic
Número de KB original: 306916
Síntomas
Cuando se usa VBScript para realizar una comparación numérica o un cálculo en un adNumeric tipo de campo (131), es posible que reciba los siguientes mensajes de error:
Mensaje de error 1
Error en tiempo de ejecución de Microsoft VBScript '800a000d'
Error de coincidencia de tiposMensaje de error 2
Error en 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 adNumeric correctamente los valores en un tipo numérico válido. Este comportamiento es una característica del diseño de la aplicación.
Resolución
Puede usar una de las dos soluciones alternativas posibles siguientes:
- Use la
CDblfunción oCIntpara convertir eladNumericcampo. - Use JScript, que no muestra este comportamiento.
Puede reproducir este comportamiento en una página de Active Server Pages (ASP) o a través de un archivo de script de Visual Basic simple (.vbs). En los pasos siguientes se muestra 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 el servidor de Oracle para crear la tabla de ejemplo:
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: Creación del archivo VBS
En Bloc de notas, cree un nuevo documento de texto denominado Test.vbs y pegue el código siguiente en la prueba.
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")) * 100Modifique la cadena de conexión para que apunte al servidor de Oracle y proporcione un nombre de usuario y una contraseña válidos.
Guarde Test.vbs en el escritorio. Debería recibir una advertencia que indica que el cambio de 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 muestra extensiones para los tipos de archivo conocidos.
Cierre Test.vbs.
En el escritorio, haga doble clic en Test.vbs para ejecutar el código. Recibe el mensaje de error Desajuste de tipo .
Quite la marca de comentario de la siguiente línea de código, que convierte el
adNumericcampo en un tipo de datos doble:MsgBox "Numeric field * 100 = " & cdbl(oRS("Custid")) * 100Comente la siguiente línea de código:
MsgBox "Numeric field * 100 = " & oRS("CustID") * 100Cierre y guarde Test.vbs.
En el escritorio, haga doble clic en Test.vbs para volver a ejecutar el código y, a continuación, recibirá dos cuadros de mensaje y ningún mensaje de error.