(demasiado antiguo para responder)
Escribo un número y me graba otro en la bd
t***@gmail.com
2009-04-01 20:34:49 UTC
Buenas,
Tengo un programa que recibe como información cantidades, las mismas
son capturadas por un textbox y en su lostfocus envio la información a
una funcion ubicada en un modulo del sistema.
Este modulo la recibe y da formato a los datos segun se indique
(fecha, numeros, etc) y usando format$ o FormatNumber$ y se refresca
el textbox.
Esto funciona perfectamente hasta aqui.
El problema es que al grabar los datos en la bd el número cambia, es
decir, si escribo 8250 el me refleja 8.250,00 pero en la bd graba
8,25. y 8250,25 muestra 8.250,25 y graba 8,25.
Cual puede ser el error que estoy cometiendo?
Uso una bd access 2003. El campo receptor de los datos es double. La
conexion la hago mediante ADODB. Uso VB6
Gracias de antemano
saraza
2009-04-01 22:31:22 UTC
Fijate en la configuracion regional de windows, si coincide con la
puntuacion que estas usando


<***@gmail.com> wrote in message news:6a3492e1-0286-45f3-bc0b-***@f19g2000yqh.googlegroups.com...
Buenas,
Tengo un programa que recibe como información cantidades, las mismas
son capturadas por un textbox y en su lostfocus envio la información a
una funcion ubicada en un modulo del sistema.
Este modulo la recibe y da formato a los datos segun se indique
(fecha, numeros, etc) y usando format$ o FormatNumber$ y se refresca
el textbox.
Esto funciona perfectamente hasta aqui.
El problema es que al grabar los datos en la bd el número cambia, es
decir, si escribo 8250 el me refleja 8.250,00 pero en la bd graba
8,25. y 8250,25 muestra 8.250,25 y graba 8,25.
Cual puede ser el error que estoy cometiendo?
Uso una bd access 2003. El campo receptor de los datos es double. La
conexion la hago mediante ADODB. Uso VB6
Gracias de antemano
t***@gmail.com
2009-04-02 02:12:58 UTC
Ya he verificado y coincide, es decir, coma (,) para decimales y punto
(.) para miles.
Tambien he usado prueba = format$(0.1;".") para verificar y en efecto
es como lo indico.
Seguire probendo e informandoles.
Gracias
Post by t***@gmail.com
Buenas,
Tengo un programa que recibe como información cantidades, las mismas
son capturadas por un textbox y en su lostfocus envio la información a
una funcion ubicada en un modulo del sistema.
Este modulo la recibe y da formato a los datos segun se indique
(fecha, numeros, etc) y usando format$ o FormatNumber$ y se refresca
el textbox.
Esto funciona perfectamente hasta aqui.
El problema es que al grabar los datos en la bd el número cambia, es
decir, si escribo 8250 el me refleja 8.250,00 pero en la bd graba
8,25. y 8250,25 muestra 8.250,25 y graba 8,25.
Cual puede ser el error que estoy cometiendo?
Uso una bd access 2003. El campo receptor de los datos es double. La
conexion la hago mediante ADODB. Uso VB6
Gracias de antemano
t***@gmail.com
2009-04-02 02:17:17 UTC
Ya he verificado y coincide, es decir, coma (,) para decimales y punto
(.) para miles.
Tambien he usado prueba = format$(0.1;".") para verificar y en efecto
es como lo indico.
Seguire probendo e informandoles.
Gracias
Post by saraza
Fijate en la configuracion regional de windows, si coincide con la
puntuacion que estas usando
Buenas,
Tengo un programa que recibe como información cantidades, las mismas
son capturadas por un textbox y en su lostfocus envio la información a
una funcion ubicada en un modulo del sistema.
Este modulo la recibe y da formato a los datos segun se indique
(fecha, numeros, etc) y usando format$ o FormatNumber$ y se refresca
el textbox.
Esto funciona perfectamente hasta aqui.
El problema es que al grabar los datos en la bd el número cambia, es
decir, si escribo 8250 el me refleja 8.250,00 pero en la bd graba
8,25. y 8250,25 muestra 8.250,25 y graba 8,25.
Cual puede ser el error que estoy cometiendo?
Uso una bd access 2003. El campo receptor de los datos es double. La
conexion la hago mediante ADODB. Uso VB6
Gracias de antemano
Leonardo Azpurua
2009-04-02 13:34:51 UTC
<***@gmail.com> escribi� en el mensaje news:a9421212-b408-41c2-b105-***@z19g2000yqe.googlegroups.com...
Ya he verificado y coincide, es decir, coma (,) para decimales y punto
(.) para miles.
Tambien he usado prueba = format$(0.1;".") para verificar y en efecto
es como lo indico.
Seguire probendo e informandoles.
Gracias

---------------------

Sería relevante ver la manera en que estás grabando los datos.

Access SQL, en cuanto lenguaje, es absolutamente independiente de la
configuración regional: los números no usan separadores de millar y el
separador deciimal siempre es el punto.

Aunque si el problema estuviera en la sentencia que usas para
insertar/actualizar, lo más probable sería que obtuvieras un error de
sintaxis al tratar de ejecutar el comando.

La otra causa podría ser la manera en que conviertes el contenido del
textbox a número.

Pero si no muestras ambos trozos de código, difícil va a ser ayudarte.


Salud!
t***@gmail.com
2009-04-02 14:11:00 UTC
Buenas, me disculpo por la omisión; en realidad es informacion vital.

'esta es la función que da formato al text (solo se incluye lo
relacionado a la cantidad).
Public Function Formato_Datos(datos As String, tipo As String) As
variant
Select Case tipo
Case "CANTIDAD"
Formato_Datos = FormatNumber$(datos, 2,
vbTrue)
Case Else
Formato_Datos = ""
End Select
End Function

El llamado se hace asi: text1(index) =Formato_Datos(text1(index),
"CANTIDAD")

Y se guarda en la bd mediante este codigo:

for x= 0 to 25
rs(x) = IIf(Text1(x) = "", Null, Text1(x))
next
rs.update

Se verificó que los datos coincidieran entre los text y los campos de
la bd y lo hacen.

Se ha cambiado la funcion a string e igual. No se cambia a numero ya
que anularia el formato de fecha y otras validaciones.
Se ha aislado solo esta porción para verificar que ningun otro
segmento fuese el del error y nada.
El resto de los datos es almacenado correctamente, solo se presenta
con cantidades. He iniciado una rutina de reemplazo de caracteres (,
por . y viceversa) a ver si funciona.
Les cuento al terminar.
Gracias
Saga
2009-04-02 14:46:25 UTC
Prueba con esto:

dim sNumero as string
dim sSQL as string

sNumero = Str$(Text1.Text)

sSQL = "insert into MiTabla (CampoNum) values(" & sNumero & ")"

Saludos, Saga


<***@SPAMMEgmail.com> wrote in message news:6a3492e1-0286-45f3-bc0b-***@f19g2000yqh.googlegroups.com...
Buenas,
Tengo un programa que recibe como información cantidades, las mismas
son capturadas por un textbox y en su lostfocus envio la información a
una funcion ubicada en un modulo del sistema.
Este modulo la recibe y da formato a los datos segun se indique
(fecha, numeros, etc) y usando format$ o FormatNumber$ y se refresca
el textbox.
Esto funciona perfectamente hasta aqui.
El problema es que al grabar los datos en la bd el número cambia, es
decir, si escribo 8250 el me refleja 8.250,00 pero en la bd graba
8,25. y 8250,25 muestra 8.250,25 y graba 8,25.
Cual puede ser el error que estoy cometiendo?
Uso una bd access 2003. El campo receptor de los datos es double. La
conexion la hago mediante ADODB. Uso VB6
Gracias de antemano
Ivan
2009-04-02 21:40:55 UTC
hola, (y disculpas por meter baza desde la [casi] completa ingnorancia
sobre BDs)

en realidad mas que una respuesta es una consulta sobre algo que me ha
llamado la atencion, aunque posiblemente no tenga que ver con el
problema (y sorry si digo alguna bobada :-()=>
Post by t***@gmail.com
'esta es la función que da formato al text
....
Public Function Formato_Datos(datos As String, tipo As String) As
variant
.....
for x= 0 to 25
     rs(x) = IIf(Text1(x) = "", Null, Text1(x))
next
rs.update
si el campo receptor de la cantidad es Double pero le pasas el
contenido del textbox directamente, que si no me equivoco no deja de
ser un String, supongo que de alguna manera se realiza una conversion
interna de string a double, y por lo que comentas, esta conversion
'implicita' parece que toma los valores 'literales' de tu text
formateado sin tener en cuenta la configuracion regional

¿has probado ha realizar una conversion explicita <puedes hacerla solo
para ese campo si no quieres que te afecte el resto de formatos> antes
de cargarlo en la BD?

bueno, lo dicho, lo mismo es una tontuna, pero si lo es y me lo
comentais, al menos me quitare algunas dudas

un saludo
Ivan
Saga
2009-04-02 22:11:01 UTC
Si le pasas el contenido del text box directamente, debe contener
datos que VB pueda convertir al mismo tipo del campo en la
base de datos.

Si el valor del text box es 3.234,90 no sera posible correctamente
comvertirlo implicitamente a doble, pero si haces esto, todo queda bien:

str$(Text1.text)

Claro, seguimos asumiendo que el contenido del textbox es
numerico. Saludos, Saga


"Ivan" <***@SPAMMEteleline.es> wrote in message news:103882ee-e04b-4472-96f6-***@n20g2000vba.googlegroups.com...
hola, (y disculpas por meter baza desde la [casi] completa ingnorancia
sobre BDs)

en realidad mas que una respuesta es una consulta sobre algo que me ha
llamado la atencion, aunque posiblemente no tenga que ver con el
problema (y sorry si digo alguna bobada :-()=>
Post by t***@gmail.com
'esta es la función que da formato al text
....
Public Function Formato_Datos(datos As String, tipo As String) As
variant
.....
for x= 0 to 25
rs(x) = IIf(Text1(x) = "", Null, Text1(x))
next
rs.update
si el campo receptor de la cantidad es Double pero le pasas el
contenido del textbox directamente, que si no me equivoco no deja de
ser un String, supongo que de alguna manera se realiza una conversion
interna de string a double, y por lo que comentas, esta conversion
'implicita' parece que toma los valores 'literales' de tu text
formateado sin tener en cuenta la configuracion regional

¿has probado ha realizar una conversion explicita <puedes hacerla solo
para ese campo si no quieres que te afecte el resto de formatos> antes
de cargarlo en la BD?

bueno, lo dicho, lo mismo es una tontuna, pero si lo es y me lo
comentais, al menos me quitare algunas dudas

un saludo
Ivan
Ivan
2009-04-02 22:42:55 UTC
hola Saga, y muchas gracias por la respuesta
Post by Saga
Si el valor del text box es 3.234,90 no sera posible correctamente
str$(Text1.text)
efectivamente a mi me da la impresion de que por aqui debe andar el
problema de OP

de todas formas permiteme un par de dudas=>

si no me recuerdo mal, en VBA excel existia cierta diferencia a la
hora de acceder al contenido de un textbox entre hacerlo directamente
con la propiedad por defecto (text si no me equivoco) pero
omitiendola, y el hacerlo usandola explicitamente,' y a su vez entre
hacerlo asi o hacerlo mediante la propiedad 'Value' (aunque no se si
los Text de VB tambien tienen la propiedad value ni si funciona igual)

de nuevo si no recuerdo mal, una de esas diferencias era que, por
ejemplo con el uso de value si reconocia y realizaba bien las
conversiones implicitas con relacion a la configuracion regional, al
menos a la hora de interactuar entre un textbox y una hoja de calculo,
mientras que omitiendo la propiedad (y no estoy seguro de si tambien
con Text) siempre te devolvia un String

¿es posible que suceda algo similar en VB?

y la otra duda (casi 'morbosa' 8-D y un poco de vago) es sobre 'str
$'=>

¿a que equivale exactamente?

aunque hace tiempo lei [sobre todo en el foro] algo sobre el uso de
los 'sufijos' tipo $, [e incluso creo que realice alguna consulta al
respecto] ahora mismo no recuerdo nada

bueno, un saludo y gracias de nuevo
Ivan
Post by Saga
Si le pasas el contenido del text box directamente, debe contener
datos que VB pueda convertir al mismo tipo del campo en la
base de datos.
Si el valor del text box es 3.234,90 no sera posible correctamente
  str$(Text1.text)
Claro, seguimos asumiendo que el contenido del textbox es
numerico. Saludos, Saga
hola, (y disculpas por meter baza desde la [casi] completa ingnorancia
sobre BDs)
en realidad mas que una respuesta es una consulta sobre algo que me ha
llamado la atencion, aunque posiblemente no tenga que ver con el
problema (y sorry si digo alguna bobada :-()=>
Post by t***@gmail.com
'esta es la función que da formato al text
....
Public Function Formato_Datos(datos As String, tipo As String) As
variant
.....
for x= 0 to 25
rs(x) = IIf(Text1(x) = "", Null, Text1(x))
next
rs.update
si el campo receptor de la cantidad es Double pero le pasas el
contenido del textbox directamente, que si no me equivoco no deja de
ser un String, supongo que de alguna manera se realiza una conversion
interna de string a double, y por lo que comentas, esta conversion
'implicita' parece que toma los valores 'literales' de tu text
formateado sin tener en cuenta la configuracion regional
¿has probado ha realizar una conversion explicita <puedes hacerla solo
para ese campo si no quieres que te afecte el resto de formatos> antes
de cargarlo en la BD?
bueno, lo dicho, lo mismo es una tontuna, pero si lo es y me lo
comentais, al menos me quitare algunas dudas
un saludo
Ivan
Saga
2009-04-03 14:34:34 UTC
El sufijo $, cuando se usa con las funciones que lo soportan, le indica a VB
que
el usuario desea tener un resultado tipo String. Esto causa que VB
internamente
use procesos mas eficientes.

En particular, str$() toma en cuenta la configuracion regional del
parametro, pero
regresa el numero como String usando un formato preestablecido, que es sin
coma y usando el punto como separador decimal. Str() tiene otro
comportamiento
en que usa los simbolos definidos en la configuracion regional en el
resultado.
Saludos, Saga



"Ivan" <***@SPAMMEteleline.es> wrote in message news:59f8f463-8b98-4995-807a-***@r37g2000yqn.googlegroups.com...
hola Saga, y muchas gracias por la respuesta
Post by Saga
Si el valor del text box es 3.234,90 no sera posible correctamente
str$(Text1.text)
efectivamente a mi me da la impresion de que por aqui debe andar el
problema de OP

de todas formas permiteme un par de dudas=>

si no me recuerdo mal, en VBA excel existia cierta diferencia a la
hora de acceder al contenido de un textbox entre hacerlo directamente
con la propiedad por defecto (text si no me equivoco) pero
omitiendola, y el hacerlo usandola explicitamente,' y a su vez entre
hacerlo asi o hacerlo mediante la propiedad 'Value' (aunque no se si
los Text de VB tambien tienen la propiedad value ni si funciona igual)

de nuevo si no recuerdo mal, una de esas diferencias era que, por
ejemplo con el uso de value si reconocia y realizaba bien las
conversiones implicitas con relacion a la configuracion regional, al
menos a la hora de interactuar entre un textbox y una hoja de calculo,
mientras que omitiendo la propiedad (y no estoy seguro de si tambien
con Text) siempre te devolvia un String

¿es posible que suceda algo similar en VB?

y la otra duda (casi 'morbosa' 8-D y un poco de vago) es sobre 'str
$'=>

¿a que equivale exactamente?

aunque hace tiempo lei [sobre todo en el foro] algo sobre el uso de
los 'sufijos' tipo $, [e incluso creo que realice alguna consulta al
respecto] ahora mismo no recuerdo nada

bueno, un saludo y gracias de nuevo
Ivan
Post by Saga
Si le pasas el contenido del text box directamente, debe contener
datos que VB pueda convertir al mismo tipo del campo en la
base de datos.
Si el valor del text box es 3.234,90 no sera posible correctamente
str$(Text1.text)
Claro, seguimos asumiendo que el contenido del textbox es
numerico. Saludos, Saga
hola, (y disculpas por meter baza desde la [casi] completa ingnorancia
sobre BDs)
en realidad mas que una respuesta es una consulta sobre algo que me ha
llamado la atencion, aunque posiblemente no tenga que ver con el
problema (y sorry si digo alguna bobada :-()=>
Post by t***@gmail.com
'esta es la función que da formato al text
....
Public Function Formato_Datos(datos As String, tipo As String) As
variant
.....
for x= 0 to 25
rs(x) = IIf(Text1(x) = "", Null, Text1(x))
next
rs.update
si el campo receptor de la cantidad es Double pero le pasas el
contenido del textbox directamente, que si no me equivoco no deja de
ser un String, supongo que de alguna manera se realiza una conversion
interna de string a double, y por lo que comentas, esta conversion
'implicita' parece que toma los valores 'literales' de tu text
formateado sin tener en cuenta la configuracion regional
¿has probado ha realizar una conversion explicita <puedes hacerla solo
para ese campo si no quieres que te afecte el resto de formatos> antes
de cargarlo en la BD?
bueno, lo dicho, lo mismo es una tontuna, pero si lo es y me lo
comentais, al menos me quitare algunas dudas
un saludo
Ivan
Ivan
2009-04-03 17:09:05 UTC
hola Saga
Post by Saga
En particular, str$() toma en cuenta la configuracion regional del
parametro, pero
regresa el numero como String usando un formato preestablecido, que es sin
coma y usando el punto como separador decimal. Str() tiene otro
comportamiento .....
muy interesante. Muchas gracias y un saludo.
Ivan
Ivan
2009-04-03 21:58:27 UTC
hola de nuevo por aqui,

solo una rectificacion de una metedura de pata para no confundir a
quien pueda leer mi anterior mensaje =>
Post by Ivan
si no me recuerdo mal, en VBA excel existia cierta diferencia a la
hora de acceder al contenido de un textbox entre hacerlo .....
........
de nuevo si no recuerdo mal, una de esas diferencias era que, por
ejemplo con el uso de value si reconocia y realizaba bien las
conversiones implicitas con relacion a la configuracion regional ....
pues parece ser que SI recordaba MAL. La diferencia mas visible
realmente es que usando la propiedad por defecto (es decir,
omitiendola) siempre te devuelve un string, aunque se trate de un
numero, mientras que tanto con Value como con Text usadas
explicitamente SI realiza la transformacion a numero directamente(o al
menos lo reconoce como tal).

Pero en lo que se refiere a la configuracion regional NO es VALIDO:
aplica directamente la configuracion por defecto de VB (usa, si no me
equivoco), es decir, punto para decimales y coma para miles.

el str$() apuntado por Saga parece resolver perfectamente el problema.
Y ademas parece lo mas sencillo, aunque yo en su dia usaba otras
formas ..:-))

un saludo y disculpas por la metedura de pata
Ivan
Post by Ivan
hola Saga, y muchas gracias por la respuesta
Post by Saga
Si el valor del text box es 3.234,90 no sera posible correctamente
  str$(Text1.text)
efectivamente a mi me da la impresion de que por aqui debe andar el
problema de OP
de todas formas permiteme un par de dudas=>
si no me recuerdo mal, en VBA excel existia cierta diferencia a la
hora de acceder al contenido de un textbox entre hacerlo directamente
con la propiedad por defecto (text si no me equivoco) pero
omitiendola, y el hacerlo usandola explicitamente,' y a su vez entre
hacerlo asi o hacerlo mediante la propiedad 'Value' (aunque no se si
los Text de VB tambien tienen la propiedad value ni si funciona igual)
de nuevo si no recuerdo mal, una de esas diferencias era que, por
ejemplo con el uso de value si reconocia y realizaba bien las
conversiones implicitas con relacion a la configuracion regional, al
menos a la hora de interactuar entre un textbox y una hoja de calculo,
mientras que omitiendo la propiedad (y no estoy seguro de si tambien
con Text) siempre te devolvia un String
¿es posible que suceda algo similar en VB?
y la otra duda (casi 'morbosa' 8-D y un poco de vago) es sobre 'str
$'=>
¿a que equivale exactamente?
aunque hace tiempo lei [sobre todo en el foro] algo sobre el uso de
los 'sufijos' tipo $, [e incluso creo que realice alguna consulta al
respecto] ahora mismo no recuerdo nada
bueno, un saludo y gracias de nuevo
Ivan
Post by Saga
Si le pasas el contenido del text box directamente, debe contener
datos que VB pueda convertir al mismo tipo del campo en la
base de datos.
Si el valor del text box es 3.234,90 no sera posible correctamente
  str$(Text1.text)
Claro, seguimos asumiendo que el contenido del textbox es
numerico. Saludos, Saga
hola, (y disculpas por meter baza desde la [casi] completa ingnorancia
sobre BDs)
en realidad mas que una respuesta es una consulta sobre algo que me ha
llamado la atencion, aunque posiblemente no tenga que ver con el
problema (y sorry si digo alguna bobada :-()=>
Post by t***@gmail.com
'esta es la función que da formato al text
....
Public Function Formato_Datos(datos As String, tipo As String) As
variant
.....
for x= 0 to 25
rs(x) = IIf(Text1(x) = "", Null, Text1(x))
next
rs.update
si el campo receptor de la cantidad es Double pero le pasas el
contenido del textbox directamente, que si no me equivoco no deja de
ser un String, supongo que de alguna manera se realiza una conversion
interna de string a double, y por lo que comentas, esta conversion
'implicita' parece que toma los valores 'literales' de tu text
formateado sin tener en cuenta la configuracion regional
¿has probado ha realizar una conversion explicita <puedes hacerla solo
para ese campo si no quieres que te afecte el resto de formatos> antes
de cargarlo en la BD?
bueno, lo dicho, lo mismo es una tontuna, pero si lo es y me lo
comentais, al menos me quitare algunas dudas
un saludo
Ivan- Ocultar texto de la cita -
- Mostrar texto de la cita -