Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal!
Tenho uma tabela no Access com um campo Horas Trabalhadas no formato DateTime. Meu problema é somar os registros selecionados por uma pesquisa...
Sabe-se que o delphi não soma horas superiores a 23:59:59. Alguém sabe como resolver? poderiam montar um exemplo, por favor?
Agradeço!
>
Olá,
Fiz um exemplo básico do que você deve fazer...
Teste e veja o que você precisa, acha-se rotinas bem feitas de calculos de horas na net, mas basicamente é isso que você precisa
procedure TForm1.Button1Click(Sender: TObject);
var
Horas : TTime;
TempoTotal : TDateTime;
Dias : Integer;
TotalHoras : Integer; TempoTotal := StrToDateTime('14:00') + StrToTime('14:00') ;
Horas := TempoTotal;
showMessage(DateTimeToStr(TempoTotal));
Dias := DaysBetween(strToDateTime('30/12/1899'), TempoTotal );
showmessage(IntToStr(Dias) + ' dias e ' + TimeToStr(Horas) + ' horas ');
TotalHoras := (Dias * 24) + HourOf(Horas);
showMessage(IntToStr(TotalHoras));
end;
Att.
Obrigado! Funciona sim!!
Eu encontrei na internet algo similar... no entanto estou com problemas em relação a soma dos registros na query...
Já tentei de tudo e o resultado da soma sempre é inferior a 24hs. Quando a soma é aplicada a 2 horários em 2 Edit's funciona perfeitamente, agora na tabela NÂO!
Já procurei na internet, mas nada funcional em relação a soma de registros no formato DateTime...
Olá novamente...
É o seguinte... utilize uma variavel do tipo TDateTime para acumular as horas...
Por exemplo
var AcumuladorHoras : TDateTime;
Dias : Integer;
TotalHoras : Integer;
Horas : TTime;
while not qry.EOF then begin
AcumuladorHoras := AcumuladorHoras + qry.FieldByName('TEMPO').asDateTime;
qry.Next;
end;
Horas := AcumuladorHoras;
Dias := DaysBetween(strToDateTime('30/12/1899'), AcumuladorHoras );
TotalHoras := (Dias * 24) + HourOf(Horas);
showMessage(IntToStr(TotalHoras));
Algo parecido com isso, nada dificil demais... abraço
att.
>
Olá novamente...
É o seguinte... utilize uma variavel do tipo TDateTime para acumular as horas...
Por exemplo
var AcumuladorHoras : TDateTime;
Dias : Integer;
TotalHoras : Integer;
Horas : TTime;
while not qry.EOF then begin
AcumuladorHoras := AcumuladorHoras + qry.FieldByName('TEMPO').asDateTime;
qry.Next;
end;
Horas := AcumuladorHoras;
Dias := DaysBetween(strToDateTime('30/12/1899'), AcumuladorHoras );
TotalHoras := (Dias * 24) + HourOf(Horas);
showMessage(IntToStr(TotalHoras));
Algo parecido com isso, nada dificil demais... abraço
att.
Legal, é isso mesmo!
Nunca tinha trabalhado com horas...por isso ainda preciso de sua ajuda...
seguinte Vinicius... seu exemplo calcula as horas...como eu devo fazer para calcular também os minutos e segundos?
preciso obter o resultado no formato 00:00:00.
ah...prometo que é a última pergunta...hehehe
Valeu!
Caro Amigo...
Primeiramente não é recomendado mostrar as horas no formato HH:MM:SS... e se passar de 100 horas? e se passar de 1000 horas?
>> 1254:49:31 isso fica muito estranho
Mas saindo das questões filosóficas... se quiser fazer assim mesmo utilize isto
Então, é só verificar as funções de horas, minutos e segundos que conseguirá fazer.
Troque a ultima linha por essa e
showMessage(FormatFloat('00', (Dias * 24) + MinuteOf(Horas)) + ':' + FormatFloat('00', MinuteOf(Horas)) + ':' + FormatFloat('00', SecondOf(Horas)));
PS. vamos quebrar a cabeça um pouco né meu caro... e faça uma função pra isso, que você entre com um TDateTime e te retorna uma String 00:00:00, o que acha?
Abrassss
Att.
>
Caro Amigo...
Primeiramente não é recomendado mostrar as horas no formato HH:MM:SS... e se passar de 100 horas? e se passar de 1000 horas?
>> 1254:49:31 isso fica muito estranho
Mas saindo das questões filosóficas... se quiser fazer assim mesmo utilize isto
Então, é só verificar as funções de horas, minutos e segundos que conseguirá fazer.
Troque a ultima linha por essa e
showMessage(FormatFloat('00', (Dias * 24) + MinuteOf(Horas)) + ':' + FormatFloat('00', MinuteOf(Horas)) + ':' + FormatFloat('00', SecondOf(Horas)));
PS. vamos quebrar a cabeça um pouco né meu caro... e faça uma função pra isso, que você entre com um TDateTime e te retorna uma String 00:00:00, o que acha?
Abrassss
Att.
Muito obrigado pela ajuda...agora já consigo! e...obrigado pela dica em relação ao formato HH:MM:SS.
Até mais!
Olá,
Fiz um exemplo básico do que você deve fazer...
Teste e veja o que você precisa, acha-se rotinas bem feitas de calculos de horas na net, mas basicamente é isso que você precisa
procedure TForm1.Button1Click(Sender: TObject);
var
begin
Att.