elyfesn21 0 Denunciar post Postado Outubro 15, 2009 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! Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Infoloko 0 Denunciar post Postado Outubro 15, 2009 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; begin 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. Compartilhar este post Link para o post Compartilhar em outros sites
elyfesn21 0 Denunciar post Postado Outubro 15, 2009 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; begin 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... Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Infoloko 0 Denunciar post Postado Outubro 15, 2009 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. Compartilhar este post Link para o post Compartilhar em outros sites
elyfesn21 0 Denunciar post Postado Outubro 15, 2009 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! Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Infoloko 0 Denunciar post Postado Outubro 16, 2009 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. Compartilhar este post Link para o post Compartilhar em outros sites
elyfesn21 0 Denunciar post Postado Outubro 16, 2009 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! Compartilhar este post Link para o post Compartilhar em outros sites