Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

REVISIÓN: Campos numéricos de Oracle deben se convierten para pruebas de lógicas

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 178043
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Síntomas
Cuando utiliza un campo numérico de Oracle se produce un error "Coinciden los tipos".

Se produce el error en los dos escenarios siguientes:

  • Cuando realice una prueba lógica comparar un campo numérico de Oracle con un valor entero. El siguiente es un ejemplo:
          If Oracle_Recordset("my_numeric_field")=1 then ...
    - o bien -

  • Cuando se realizan operaciones aritméticas de enteros con un campo numérico de Oracle. El siguiente es un ejemplo:
         x=Oracle_Recordset("my_numeric_field")+ 1 
Causa
Las dos condiciones siguientes producen este comportamiento:
  • Almacenar datos de entero en un numéricos de Oracle tipo campo de datos.
  • Utilizando el valor del campo numérico de Oracle en los cálculos con tipos de datos Integer.
Oracle no tiene un tipo de datos entero, sólo numérico. El problema es que tipos numéricos son datos con escala y precisión exacta y deben convertirse a otro tipo de datos comparable a enteros. De punto flotante números son valores aproximados y pueden compararse con enteros sin excepción. Para valores numéricos (o el tipo de datos decimal equivalente y anteriores) si esta conversión no tiene lugar un tipo no coincide el error.
Solución
Las funciones de conversión siguientes devuelven valores que son comparables a enteros:
  • CInt()
  • CLng()
  • CDbl()
  • CSng()
Para obtener la máxima eficacia y flexibilidad, se recomienda la función CLng().

En los escenarios enumerados en los síntomas de sección, realizando los siguientes cambios corregir el problema:
If CLng(Oracle_Recordset("my_numeric_field"))=1 then ...
x=CLng(Oracle_Recordset("my_numeric_field"))+ 1
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo.

Este problema se corrigió en el SP2 de MDAC 2.1.
Más información
Oracle utiliza un tipo de datos numérico. Si un valor entero se almacena en un campo numérico, algunos controladores ODBC (por ejemplo, Intersolv versión 3.01) devuelve un tipo de datos de punto flotante de precisión doble (es decir, VarType de VBScript de 5); otros controladores (por ejemplo, Microsoft ODBC para Oracle versión 2.73.7269) con más precisión devuelve el tipo de datos numéricos (es decir, VBScript VarType 14). En todos los casos, la propiedad Type de ADO devuelve tipo 131 (es decir, numéricos).

Propiedades

Id. de artículo: 178043 - Última revisión: 02/13/2014 06:15:11 - Revisión: 1.1

Microsoft ActiveX Data Objects 1.0, Microsoft ActiveX Data Objects 1.5, Microsoft ActiveX Data Objects 2.0, Microsoft ActiveX Data Objects 2.1 Service Pack 2, Microsoft ActiveX Data Objects 2.5

  • kbnosurvey kbarchive kbmt kb3rdparty kbado210sp2fix kbbug kbdatabase kbfix kbmdac210sp2fix kbmdacnosweep kboracle kbqfe KB178043 KbMtes
Comentarios