Si quiero recuperar el valor de un campo aggregate con un .AsFloat me da un error que no me permite accesar el campo como un Float, esto debe ser realizado por .Value, el problema esta que si el campo en cuestion no tienen valores me da una Exception, lo resolvi de la siguiente manera,
if not Modulo.cdsPropinasTotal.IsNull then
nPropina := Modulo.cdsPropinasTotal.Value
else
nPropina := 0;
El asunto esta que cuando hay mas de dos registros IsNull me lo devuelve verdadero, por los momentos lo solucione asi:
try
nPropina := Modulo.cdsPropinasTotal.Value
except
nPropina := 0;
end;
Quisiera saber si hay alguna otra manera o estoy obviando algo...
Es un bug de Delphi que lleva muchísimos años (yo creo que es por culpa de las famosas interfaces, debe tener declarada una interface de tipo TFloatField, o similar, pero no debe estar totalmente implementada).
Personalmente me declaro una función genérica Num_NoNulo, y en lugar de recuperar el campo con MiCampo.AsFloat, lo hago con Num_NoNulo(MiCampo.Value).
La definición de esa función, es lo que ya has hecho :
function Num_NoNulo(Numero: Variant): Double;
begin
try
Result := Numero;
except
Result := 0;
end;
end;
Así que tu código pasa a ser :
nPropina := Rutinas.Num_NoNulo(Modulo.cdsPropinasTotal.Value);
Saludos.