Estimados Amigos,
Agradeceré mucho a quien me pueda orientar sobre la forma de resolver este problema con conexión a bases de datos...
Me conecto a una base de datos sencilla en Access, a través de un componente ADOConnection (no uso nada de ODBC ni otras cosas). Me conecto a una tabla a través de de un ADOTable, luego conecto a esta mediante un DataSource, y finalmente, despliego los datos de la tabla en un DBGrid. Hasta aquí todo bien. El problema viene debido a que en la tabla existe un campo 'valor' en donde deben guardarse cantidades monetarias. Originalmente en la base de datos este campo era de tipo 'Moneda', y en mi aplicación en Delphi debo hacer cierto cálculo para establecer el valor que debe guardarse en este campo, lo que hago de la siguiente manera:
Código:
ADOTable1.FieldValues['valor']:=Ceil(minutos(FieldValues['inicio'], FieldValues['fin'])/6)*0.1;
La función 'minutos' devuelve un resultado integer. Este valor se divide para 6, y se aplica la función Ceil, cuyo resultado sigue siendo integer. Finalmente, se multiplica este valor por 0.1, con lo cual ya pasa a ser decimal. Pero en el momento en que se realiza el
Post, en el DBGrid aparece "BCD Overflow" en lugar del valor calculado que debería aparecer. Curiosamente, en la base de datos si se guarda el valor calculado. Pero en el DBGrid en mi aplicación, siempre sigue apareciendo el "BCD Overflow". Incluso en tiempo de diseño, se puede ver el valor correcto en el DBGrid, pero al ejecutar la aplicación no.
He buscado mucho sobre este problema, pero no he encontrado nada que realmente me haya ayudado a resolverlo. He probado cambiando el campo en la Base de datos de 'Moneda' a 'Número', de tipo 'Simple', con 2 lugares decimales (en Access), en cuyo caso, se almacena por ejemplo el valor 0.100000001490116, cuando lo correcto sería simplemente 0.10, no tengo idea por qué se altera ese valor, y lógicamente, necesito que se guarde el valor exacto. Además, por compatibilidad con versiones anteriores de esta Base de datos, preferiría enfáticamente que el campo siga siendo tipo 'Moneda'.
De antemano, muchas gracias por tomarse la molestia de leer todo este detalle del problema, y quedaré muy agradecido por sus respuestas.
Saludos,