Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Mysql-ODBC- numeros decimales (https://www.clubdelphi.com/foros/showthread.php?t=91514)

tinlespaul 22-02-2017 22:51:31

Mysql-ODBC- numeros decimales
 
Hola gente, a ver si alguien ha tenido este problema:

Tengo un sistema en el cual trabajo con delphi 2010, ODBC y Mysql.
Hace mucho tiempo que intento descubrir el origen de un error, que estoy casi seguro lo genera el odbc (version 3.51). El problema surge al momento de guardar un número decimal. Si se corre al programa en modo debugg, no hay problema y los números decimales se guardan de manera correcta en la BD. Si el programa luego se ejecuta desde el .exe, los redondea. A veces, borrando toda la tabla y volviendo a cargar los valores, funciona cuando se ejecuta desde el ejecutable, pero no en modo debugg.
A alguien le paso algo así?
Lo peor de todo es que no consigo MyDac (gratis) para delphi 2010...si no, ni hubiera dudado en usarlo, antes que al maldito ODBC.

Ojalá alguien tenga la respuesta.

Saludos!

Casimiro Notevi 22-02-2017 23:15:58

Cita:

Empezado por tinlespaul (Mensaje 513609)
Lo peor de todo es que no consigo MyDac (gratis) para delphi 2010...si no, ni hubiera dudado en usarlo, antes que al maldito ODBC.

Yo también llevo tiempo intentando conseguir un Porsche (gratis), pero nada, tengo que seguir con mi maldito cacharro :p

En cuanto a tu pregunta, creo que necesitas aclararnos un poco más y poner tu código.

roman 23-02-2017 00:22:47

También podría usar ZEOS (gratis) y dejarse de maldiciones :)

LineComment Saludos

bitbow 23-02-2017 15:56:34

Prueba con versiones anteriores del controlador haber presenta el mismo problema.

tinlespaul 23-02-2017 17:07:33

Cita:

Empezado por Casimiro Notevi (Mensaje 513610)
Yo también llevo tiempo intentando conseguir un Porsche (gratis), pero nada, tengo que seguir con mi maldito cacharro :p

En cuanto a tu pregunta, creo que necesitas aclararnos un poco más y poner tu código.


Si...es que tampoco hay nada raro... osea, por ejemplo:

sql:='UPDATE 008_Conceptos SET '+
'Conc_Importe=:qImporte,Conc_Actualizable=:qActua,Conc_NroOrden=:qOrden '+
'WHERE Conc_ID='+inttostr(Var_Global.ID_Conceptos);

dm.Q_Conceptos.Close;
dm.Q_Conceptos.SQL.Clear;
dm.Q_Conceptos.SQL.Add(sql);

dm.Q_Conceptos.Parameters.ParamByName('qImporte').Value :=strtofloat(t_importe.text);
dm.Q_Conceptos...
dm.Q_Conceptos...

dm.Q_Conceptos.ExecSQL;



Ni siquiera entro en el detalle del formato del Nro real que deseo. El error es que si funciona en modo debugg (guardando el nro con sus decimales), no funciona ejecutando el .exe (lo redondea) , y viceversa...la pregunta era si a alguien le había pasado algo así...es muy raro. Llevo mucho tiempo luchando con esto y leyendo millones de foros y no hay solución... Probé muchisimos Drivers y nada...siempre el mismo problema.

Voy a tener que usar Zeos...

Casimiro Notevi 23-02-2017 17:49:40

Bien, antes de continuar:
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)

Y recuerda poner los tags al código fuente, ejemplo:



Gracias :)

orodriguezca 23-02-2017 19:36:00

Que tipo de datos tiene en la tabla la columna Conc_Importe?. Si el tipo de dato es float o double la propia base de datos puede tener tendencia a "redondear" o aproximar los datos. Este comportamiento me ha ocurrido en Firebird 2.5. El problema lo he corregido utilizando tipos de datos DECIMAL o NUMERIC en las columnas de las tablas.

Otro punto a tener en cuenta es que la función strtofloat es sensible a la configuración regional y puede estar omitiendo el texto posterior al "punto" o "coma" decimal al realizar la conversión, aún cuando se haya establecido correctamente la variable global DecimalSeparator a menos que también se use la instrucción Application.UpdateFormatSettings := False;.

tinlespaul 24-02-2017 12:55:39

Cita:

Empezado por orodriguezca (Mensaje 513649)
Que tipo de datos tiene en la tabla la columna Conc_Importe?. Si el tipo de dato es float o double la propia base de datos puede tener tendencia a "redondear" o aproximar los datos. Este comportamiento me ha ocurrido en Firebird 2.5. El problema lo he corregido utilizando tipos de datos DECIMAL o NUMERIC en las columnas de las tablas.

Otro punto a tener en cuenta es que la función strtofloat es sensible a la configuración regional y puede estar omitiendo el texto posterior al "punto" o "coma" decimal al realizar la conversión, aún cuando se haya establecido correctamente la variable global DecimalSeparator a menos que también se use la instrucción Application.UpdateFormatSettings := False;.

Si, son muy acertadas tus recomendaciones.
El tipo del campo es DECIMAL (10,2).
Tengo en cuenta el DecimalSeparator y la configuración regional. Lo raro de esto, es que a veces se genera el problema y a veces no. Por eso es muy difícil descubrir que es lo que está pasando.
Quizás tengo algún error implícito con el ODBC y ni cuenta me estoy dando. Empece a usar Zeos y me funciona perfecto.
Debido a que es un sistema importante (en cuando a cantidad de módulos y operaciones) dudaba en utilizarlo, no se que confianza tenerle a Zeos...pero por el momento funciona.

Tengo un sólo problema con Zeos, que no tiene que ver con conversiones, sino que al ejecutar el paso a paso usando un BreackPoint me acusa el error "Source File not found ZAbstractRODataset.pas" en el primer intento de hacer un trace to next source line.
No se si a alguien le pasó algo así...


La franja horaria es GMT +2. Ahora son las 11:11:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi