Ayuda urgente: Campos Number

ACRV
16 de Noviembre del 2005
Muy buenas,

Tengo un problema al traerme números de Oracle y realizar operaciones con ellos. Si tengo en una tabla 2 campos NUMBER y los consulto con un rercorset, al intentar sumarlos después me da un error de tipo:

Dim a, b, res

'HAGO LA CONSULTA DE LA BASE DE DATOS
cadConexion = "Provider=OraOLEDB.Oracle.1;Password=ademanda_owner;" _
& "Persist Security Info=False;User ID=ademanda_owner;Data Source=ademanda"
set conn = Server.CreateObject("ADODB.Connection")
conn.Open cadConexion
Set rs = Server.CreateObject("ADODB.Recordset")

'SQL = "SELECT A, B from TABLA"
rs.Open SQL, conn,3,3
a = Rs.Fields(0)
b = Rs.Fields(1)
res = a + b

Tipo de error:
Error de Microsoft VBScript en tiempo de ejecución (0x800A000D)
No coinciden los tipos

He probado también conectarme con el proveedor de Microsoft en vez de el de Oracle y tampoco funciona. También he probado poner los campos INTEGER en vez de NUMBER y tampoco. De la única forma que me ha funcionada ha sido forzando los tipos con la función CLng():

res = CLng(a) + CLng(b)

Pero esto no me vale, ya que estoy migrando una aplicación con muchísimas páginas.

Espero vuestra ayuda, muchas gracias de antemano. Saludos,

a
16 de Noviembre del 2005
Prueba a indicar el tipo en las variables que defines:
Dim a as long
Dim b as long
dim res as long

acrv
16 de Noviembre del 2005
Hola,

El código que he mostrado se encuentra dentro de una página ASP, por lo que todas las variables son de tipo Variant.

Gracias de todas formas

Leonardo
16 de Noviembre del 2005
Es posible que algun valor a o b contengan un valor nulo

Rodolfo Reyes
16 de Noviembre del 2005
Pues hasta donde conozco de ASP tienes que utilizar algo como CLng o Cint, etc. para poder hacer operaciones aritmeticas con los datos de un query.

Como bien lo dijiste el tipo de datos que se utiliza el Variant, lo cual significa que en tiempo de ejecución define el tipo de dato real, y por defaul utiliza tipo caracter, para poder definir cualquier otro tipo lo tienes que especificar por medio de la funcion que tu mismo indicaste.