Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 tiposMensaje 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
oCInt
para convertir el campoadNumeric
. - 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
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
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.
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.
Cierre Test.vbs.
En su escritorio, haga doble clic en Test.vbs para ejecutar el código. Recibe el siguiente mensaje de error de coincidencia de tipos.
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
Comente la siguiente línea de código:
MsgBox "Numeric field * 100 = " & oRS("CustID") * 100
Cierre y guarde Test.vbs.
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.