Yo lo hice de la siguiente manera: Supongamos que tienes en el DBGrid los siguientes campos de tu tabla detalles: CANTIDAD, DETALLE, PRECIO UNITARIO, TOTAL en este mismo orden, y quieres que la suma de todos los totales pasen a un label. En el evento OnKeyPress del DBGrid pones
Código Delphi
[-]
if Key = #13 then begin
if DBGrid1.Fields[0].Value = Null then
DBGrid1.Fields[0].AsFloat := 1; if DBGrid1.Fields[2].Value = Null then
DBGrid1.Fields[2].AsFloat := 0; DBGrid1.Fields[3].AsFloat := DBGrid1.Fields[0].AsFloat * DBGrid1.Fields[2].AsFloat; LabelSumaTotal.Caption:='0'; TDetalles.First; While TDetalles.Eof=False do
begin
DBGrid1.Fields[3].AsFloat := DBGrid1.Fields[0].AsFloat * DBGrid1.Fields[2].AsFloat;
LabelSumaTotal.Caption:=FloatToStr(DBGrid1.Fields[3].AsFloat + StrToFloat(LabelSumaTotal.Caption));
LabelImpuesto.Caption:=FloatToStr(StrToFloat(LabelSumaTotal.Caption) * 0.19); LabelTotal:=FloatToStr(StrToFloat(Label1SumaTotal.Caption) + StrToFloat(LabelImpuesto.Caption));
TDetalles.Next; end;
DBGrid1.Fields[1].FocusControl; end;
Con esto cuando el usuario vaya ingresando datos sabras a cada instante los totales. Saludos