Hola,
Tengo un problema con dbExpress, Firebird y Delphi 2007:
Resulta que al usar Sum() en un Select, si la expresión dentro del Sum contiene un valor de Doble Precisión multiplicado por uno BCD, el dbExpress está reconociendolo como un campo Float; en lugar de un campo FmtBcd, que sería lo lógico dado que es el valor más grande.
Por ejemplo, si tengo esto:
Código SQL
[-]Select Sum(UNDOBLE * UNOBCD) LASUMA From TABLAC
Donde UNDOBLE es DOUBLE PRECISION y UNOBCD es DECIMAL(18,2) , dbExpress me identifica el campo LASUMA como un DOUBLE PRECISION, o sea un TFloatField cuando debía ponerlo como un TFMTBCDField.
Es de anotar que si uso Sum() sobre un campo BCD, dbExpress trabaja bien; es decir, en el ejemplo, si uso SUM(UNOBCD) si se genera en Delphi 2007 un TFMTBCDField (aunque, al igual que en campos simples) hay que ajustarle luego manualmente la propiedad Precision a 18).
Dos preguntas :
1. De quién es la falla ?. De el dbExpress como tal ?. Del driver dbExpress que estoy usando para Firebird ?, o del propio Firebird ?. Pensaría que es el driver ya que el que uso es el que viene con Delphi y ese no está certificado; pero, no estoy seguro.
2. Que puede hacerse ?. Tengo la opción de cambiar el algoritmo; pero, sería ineficiente y además muy problemático porque ese tipo de situaciones me son comunes en el desarrollo que estoy haciendo.