Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Type mismatch for field (https://www.clubdelphi.com/foros/showthread.php?t=91603)

usuario1000 14-03-2017 00:31:44

Type mismatch for field
 
Hola a todos.

Estoy realizando una aplicacion dataSnap (Cliente-Servidor) con delphi 10 Seatle y cuando llego a una parte determinada del programa de que me tiene que mostrar en un DBGrid los datos de una tabla me sale el siguiente error:
"Type mismatch for field 'PRESUPUESTO', expecting: BCD actual: FMTBcdField."

No se como arreglarlo. Utilizo FireBird 2.5. He creado el campo PRESPUESTO como NUMERIC(12,2).

Lo cierto es que me da el problema cuando intento dar formato al campo para que se visualice en el DBGRiD con los puntos y las comas, porque si no llamo al campo, funciona la aplicación sin problemas, pero no se muestra el campo con formato. (Ejemplo 1585.85 se mostraría como 1,585.85).

Agradecería ayuda, porque estoy atascado en este punto. He leido algo por ahí pero no me aclara nada.

Saludos y gracias.

ElKurgan 14-03-2017 09:21:46

¿Qué componentes de acceso a datos usas? ¿DbXpress? ¿Firedac? ¿OTros?

A mi en DBXpress me ha aparecido a veces ese error, pero se corregía cogiendo el editor de campos de la tabla, eliminando el campo y volviéndolo a recargar...

El motivo por el que hacía eso lo desconozco, la verdad, pero se me arreglaba recargando los datos de campos

Tampoco he usado la versión Seatle, eso me pasó en XEn, por lo que a lo mejor tampoco es tu caso

Saludos

usuario1000 14-03-2017 13:04:50

Utilizo Firedac, ayer estuve quitando y añadiendo los campos muchas veces y no se arreglaba nada, incluso intenté cambiar el tipo en la base de datos de numeric a Float pero no me lo permitía el SQL Manager Lite.

Saludos

AgustinOrtu 14-03-2017 18:04:43

Yo creo que el problema esta en como interpreta FireDAC estos campos. Esto lo podes solucionar estableciendo las reglas para mapear los campos

Revisa esto:

FireDAC Data Type Mappings


Y lee el punto 6 de BDE Application Migration

Estoy seguro de que habia un seminario online pero no lo encuentro rapidamente, deberia estar en el canal de Embarcadero

Al parecer esta interpretando tu campo como un TBCDField cuando a lo mejor necesitas un currency o un double

BCD = Binary coded decimal. Documentacion

usuario1000 14-03-2017 23:31:35

Gracias por vuestras respuestas.

Gracias especialmente a AgustinOrtu, aunque tanta información que me has facilitado me ha acomplejado un poco.

Al final lo he solucinado, ¿como?, pues después de probar y combinar muchas cosas, al final ha tocado la flauta de la siguiente forma:

Me fuí a la base de datos y modifique la tabla en cuestión y todos los campos que estaban definidos en Firebird como NUMERIC(8,2), les he cambiado el tipo de dato poniendolos a FLOAT, y problema resuelto.

He vuelto a llamar a los campos persistentes y funcionando. No se si es la opción mas profesional de arreglarlo, pero al menos me permite seguir.

Lo dicho gracias a todos.

Casimiro Notevi 14-03-2017 23:46:20

Cita:

Empezado por usuario1000 (Mensaje 514332)
... todos los campos que estaban definidos en Firebird como NUMERIC(8,2), les he cambiado el tipo de dato poniendolos a FLOAT, y problema resuelto.

Eso te traerá un problema añadido, los campos float no tienen "precisión", así que cuando hagas cálculos no se guardarán valores "correctos", ejemplo figurado, 10/3=3.33333333333 pero seguramente te guardará: 3.32 o algo similar, así que no te interesa si son campos con los que harás cálculos.

usuario1000 15-03-2017 16:19:08

Cita:

Empezado por Casimiro Notevi (Mensaje 514333)
Eso te traerá un problema añadido, los campos float no tienen "precisión", así que cuando hagas cálculos no se guardarán valores "correctos", ejemplo figurado, 10/3=3.33333333333 pero seguramente te guardará: 3.32 o algo similar, así que no te interesa si son campos con los que harás cálculos.

Hola Casimiro.

Llevas razón, pero es que no se me ocurre otra cosa para avanzar. Cada vez que realice cálculos haré redondeos, no obstante, voy a probar a cambiar a otro tipo de datos en los campos a ver si tengo suerte y no me da el "dichoso" error.

Gracias por tu apreciación.


La franja horaria es GMT +2. Ahora son las 09:51:29.

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