Me parece que lo mejor sería hacer una consulta SQL que se encargue de realizar las cuentas y así evitas tener que recorrer todos los registros.
El cómo se haga la consulta dependerá de la base de datos que uses ya que algunas disponen de más funciones que otras para manejar horas.
En el peor de los casos, Paradox, podrías hacer algo como:
Código SQL
[-]
select
sum(
(
3600*extract(hour from salida1) +
60*extract(minute from salida1) +
extract(second from salida1)
)
-
(
3600*extract(hour from entrada1) +
60*extract(minute from entrada1) +
extract(second from entrada1)
)
)
+
sum(
(
3600*extract(hour from salida2) +
60*extract(minute from salida2) +
extract(second from salida2)
) -
(
3600*extract(hour from entrada2) +
60*extract(minute from entrada2) +
extract(second from entrada2)
)
)
as total
from
tabla
where
clave = 125
que te devolvería un único registro con un campo cuyo valor sería el número total de segundos.
Una vez que leas este valor puedes entonces descomponerlo en sus partes y pasarlo a una variable TTime:
Código Delphi
[-]
var
T, H, M, S: Integer;
Time: TTime;
begin
T := Query1['total'];
H := T div 3600;
M := (T mod 3600) div 60;
S := (T mod 3600) mod 60;
Time := EncodeTime(H, M, S, 0);
end;
Para sacar el total de sólo unos días puedes añadir el rango de fechas a la condición WHERE.
// Saludos