Ver Mensaje Individual
  #10  
Antiguo 31-03-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
¿Y no será que el problema está en la traducción de un TBCD al Variant? De la ayuda leo que existen estas funciones sobrecargadas:

Código Delphi [-]
procedure VarFMTBcdCreate(var aDest: Variant; const ABcd: TBcd); overload;
function VarFMTBcdCreate: Variant; overload;
function VarFMTBcdCreate(const ABcd: TBcd): Variant; overload;
function VarFMTBcdCreate(const AValue: string, Precision, Scale: SmallInt): Variant; overload;
function VarFMTBcdCreate(const AValue: Double; Precision: SmallInt = 18; Scale: SmallInt = 4): Variant; overload;

Pero en tu código tu haces simplemente esto:

Código Delphi [-]
V := VarFMTBcdCreate (149.88)

Por lo que utilizas esta:
Código Delphi [-]
function VarFMTBcdCreate(const AValue: Double; Precision: SmallInt = 18; Scale: SmallInt = 4): Variant;

Si tu idea es tener una representación TBCD desde un Double, ¿porqué no directamente emplear DoubleToBCD?. Nos evitamos trabajar con el Variant en formato TBCD:

Código Delphi [-]
function DoubleToBcd( const aValue: Double): TBcd; overload;
procedure DoubleToBcd( const aValue: Double, var bcd: TBcd; overload;

En el TFMTBCDField cuando uno trabaja con el AsCurrency internamente hace las conversiones desde el Double. Por ejemplo, al leer la propiedad se invoca a GetAsCurrency:

Código Delphi [-]
function TFMTBCDField.GetAsCurrency: Currency;
begin
  Result := GetAsFloat;
end;

Lo que se vé que utiliza al tipo Double para hacer el trabajo:

Código Delphi [-]
function TFMTBCDField.GetAsFloat: Double;
var
  bcd: TBcd;
begin
  if not GetValue(bcd) then
    Result := 0
  else
    Result := BcdToDouble(bcd);  
end;

Por tanto.

Hasta el momento yo no he utilizado Variant. Me manejo con las propiedades AsTipoConcreto, como en este caso el que tu dices, AsCurrency. De todas formas a tener en cuenta esto.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita