Nie mam DBGrida, bo używam Delphi 7 Personal, a poza tym mam niemal zerowe doświadczenie gdy
chodzi o bazy danych, ale sumowanie czasów zrobił bym tak jak pokazałem poniżej. Oto dwie funkcje:
function Time2Secs(Time: TDateTime): integer;
var
T : LongInt;
begin
T := (StrToInt(FormatDateTime('hh', Time)) * 3600)
+ (StrToInt(FormatDateTime('nn', Time)) * 60)
+ (StrToInt(FormatDateTime('ss', Time)));
Result := T;
end;
function Secs2Time(Sec: Integer): string;
var
ZH, ZM, ZS: Integer;
begin
if (Sec > 0) then
begin
ZH := Sec div 3600;
ZM := Sec div 60 - ZH * 60;
ZS := Sec - (ZH * 3600 + ZM * 60);
Result := Format('%0.2d:%0.2d:%0.2d', [ZH, ZM, ZS]);
end
else
begin
Result := Format('%0.2d:%0.2d:%0.2d', [0, 0, 0]);
end;
end;
Następnie sumowanie zrobiłem ze StringGrida. W DBGrid, pewnie używa się identycznych własnośći.
W kolumnie o indeksie zero od zerowego wiersza do tego o indeksie dwa są takie czasy jak podałeś,
a następnie po kliknięciu w Button wykonywany jest poniższy kod i jako wynik podawany jest czas w
kolumnie o indeksie jeden, a w wierszu o indeksie zero. Kod sobie możesz dopasować do użytego
przez Ciebie DBGrida. Funkcja Secs2Time była w orginale ograniczona do ilości sekund w jednej
dobie, ale ponieważ tutaj sumy mogą wyjść większe to zrobiłem sptawdzanie czy sekundy > zera.
var
I, Sekundy : integer;
begin
Sekundy := 0;
for I := 0 to StringGrid1.RowCount - 1 do
begin
Sekundy := Sekundy + Time2Secs(StrToTime(StringGrid1.Cells[0, I]));
end;
StringGrid1.Cells[1, 0] := Secs2Time(Sekundy);
end;