Problema con decimales en visual basic 6.0

Hola ralvaradot, he puesto esta pregunta en los foros de msdn pero nadie
me ha contestado ... A ver si aquí tengo suerte :) ... Quería volcar
en una matriz variant el resultado de una consulta a una base de datos
Oracle 8i mediante RDO ...
1 Dim Lv_Matriz as Variant
2 Dim Lsv_Query as String
3 Dim Lrs_Cursor As rdoResultset
4 Dim Ll_Columnas As Long
5 Dim Li_i As Integer
6 Dim Ll_Contador As Long
7
8 Ll_Contador = 0
9
10 Lsv_Query = "consulta sql sobre campo numérico"
11
12 Set Lrs_Cursor = Gcn_Conexion.OpenResultset(Lsv_Query,rdOpenDynamic)
13
14
15 With Lrs_Cursor
16 If .EOF Then
17 ReDim Lv_Matriz(0, 0)
18 Lv_Matriz(0, 0) = "'"
19
20 Me.NumFil = 0
21 Else
22 Ll_Columnas = .rdoColumns.Count
23 Me.NumCol = Ll_Columnas
24 ReDim Lv_Matriz(.RowCount, Ll_Columnas)
25 Do While Not .EOF
26 For Li_i = 0 To Ll_Columnas - 1
27 Lv_Matriz(Ll_Contador, Li_i) = .rdoColumns(Li_i).Value
28 Next
29 .MoveNext
30 Ll_Contador = Ll_Contador + 1
31 Loop
32 Me.NumFil = .RowCount
33 End If
34
35 End With
La cuestion es que si yo hago una consulta sobre un campo numérico y
ese campo numérico es, por ejemplo, 379,50, al hacer una instancia
sobre el cursor Lrs_Cursor (linea 12), en vez de volcarme el valor
que está en la base de datos (379,50) , me vuelca el valor 3795 , por
lo que al pasarle el valor a la matriz (linea 27) me lo hace mal y me
vuelca 3795 en vez de 379,5
Si yo hago esa consulta en la base de datos la consulta me devuelve el
valor que me tiene que devolver, es decir la variable Lsv_Query está
bien, lo que hace mal es instanciar el cursor Lrs_Cursor.
Mi configuración regional es la de españa, es decir que el separador
de miles es el punto y para los decimales se usa la coma.
Este código dentro de una función que no quisiera modificar. Lo curioso es que si yo llamo a la función desde otras partes de la aplicación me lo hace bien, es decir, no se traga los decimales...
No creo que tenga nada que ver con las tablas ni la configuración de oracle...
¿A qué puede ser debido esto?

1 Respuesta

Respuesta
1
En teoría un variant puede almacenar cualquier cosa, pero si tu sabes que el valor es un float, creo que lo mejor es que definas el array como float, no como variant.
El problema no creo que sea ese, además como te he comentado ese código va en una función que se llama desde otras partes de la aplicación, por lo que prefiriría no cambiarlo
Saludos
¿Se te ocurre otra cosa?
Convierte el valor explícitamente con Cdbl que es a doble, pero hay funciones para convertir a float también
No puedo convertirlo a double porque también almaceno caracteres... de todas formas ese no es el problema... el problema está en la LINEA 12:
Set Lrs_Cursor = Gcn_Conexion.OpenResultset(Lsv_Query,rdOpenDynamic)
Lsv_query es la cadena Sql con la consulta, y devuelve los numéricos correctamente, ya que si hago una consulta desde el Pl-Sql Developer del Oracle 8i me devuelve los números correctamente, es decir, con decimales, cuando se omiten los decimales es cuando se hace la instancia de Lrs_Cursor...
Ya he resuelto el problema. Si al hacer el select le añado un 0, por ejemplo
SELECT NUMUNIDADES+0
Entonces el Lrs_Cursor se instancia correctamente, es decir, no se "traga" los decimales.
Un saludo y gracias !

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas