Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Como guardar todos los decimales en campo decimal de SQL SERVER (https://www.clubdelphi.com/foros/showthread.php?t=95215)

APO 31-05-2021 17:24:22

Como guardar todos los decimales en campo decimal de SQL SERVER
 
Hola,
Tengo una base de datos en SQL SERVER, y un campo de tipo decimal (18,6) para guardar como máximo 6 decimales. El problema es que al guardar el valor en la base de datos sólo me guarda los 4 primeros decimales. Pongo el código donde me ocurre esto:

Código Delphi [-]
qPedido.Edit;
qPedido.FieldByName('PRECIO').AsFloat:=0.123456;
qPedido.Post;

qPedido es un TADODataSet y después de guardar en la base de datos, el valor que hay guardado es 0.1234, perdiendo los dos últimos decimales. He leído por internet poner la propiedad EnableBCD:=False, pero obtengo el mismo resultado.

¿Sabéis por qué ocurre esto? Gracias!

Casimiro Notevi 31-05-2021 17:52:42

Prueba con Value en lugar de AsFloat.

mamcx 31-05-2021 22:07:48

No deberias usar floats en Delphi, ni cualquier otro lenguaje, en especial si haces cálculos monetarios.

Usa un tipo Decimal como:

http://www.rvelthuis.de/programs/bigdecimals.html

El punto es que los tipos de datos, idealmente, deben alinearse para ser compatibles o idénticos a travez de toda la ruta de la app (asi que si la BD dice Decimal, en Delphi es Decimal y viceversa).

* Algo de explicación aqui: https://www.crockford.com/dec64.html. Considero que el uso de un tipo Decimal o Money es mandatorio para todos los casos de apps conclaculos de finanzas/monedas...

APO 01-06-2021 10:00:02

Ok, muchas gracias por la información. Lo tendré en cuenta para futuros desarrollos.

Para arreglar este caso, he probado de asignarle el valor con Value, y ha funcionado correctamente:

Código Delphi [-]
qPedido.Edit;
qPedido.FieldByName('PRECIO').Value:=0.123456;
qPedido.Post;

Muchas gracias, un saludo!


La franja horaria es GMT +2. Ahora son las 20:07:56.

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