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?
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 de Roberto Alvarado
1