Hola HombreGordo, si lo haces como te indica marcoszorrilla, también deberías tomar encuenta los procedimientos EnableControl, DisableControl, para no ver el movimiento por los registros de tu DBGrid y los demas que esten enlazados a tu DataSet mientras se ejecuta tu While. Otra cosita, como recorres hasta el ultimo, el puntero del registro estara en el ultimo, para ello puedes utilizar un BookMark para tener una marca que te guardara la posicion del registro actual y luego de recorrer regresar a la posición de dicho registro.
Código Delphi
[-]
var
TotalGanancias : Currency;
Marca : TBookMarkStr;
begin
TotalGanancias := 0;
Marca := MiTabla.Bookmark; MiTabla.DisableControls;
MiTabla.First;
While Not MiTabla.Eof do
begin
TotalGanancias := TotalGanancias + MiTabla.FieldbyName('ganancias').ASCurrency;
MiTabla.Next;
end;
MiTabla.EnableControls; MiTabla.Bookmark := Marca; Showmessage(CurrToStr(TotalGanancias));
Saluditos