jaumDoDelphi Postado Abril 29, 2011 Denunciar Share Postado Abril 29, 2011 Ola amigos do ScriptBrasil, boa tarde!Estou com um problema simples mais ao mesmo tempo complicado "FALTA de LOGICA" :( Tenho um programa bem simples de controle de horas, estou fazendo ele com:- Delphi 2010- DBAccess- ADOQueryA Tabela é simples tem hora de chegada e saida e total com uma tabela mestre com o MÊS atual. "segue a imagem abaixo"O calculo de hora de entrada/saida é diariamente.Mas no final do mês eu gostaria que somassem todas as horas do campo "HORA_T"dai eu tentei desta forma eu sei que estou errado mais acho que quase isso:procedure TfHORA.btnCALCTClick(Sender: TObject); var h1, h2, h3 : TDateTime; begin //j h1 := STRtoTIME(DM.ADOQhoraHORA_TT.Text); h2 := STRtoTIME('00:00:00'); DM.ADOQhora.First; while not DM.ADOQhora.Eof do begin h3 := h1 + h1; DM.ADOQhora.Next; lblHT.Caption := TimeToSTR(H3) end; end;Com este código atual não soma nada, Sim é um problema lógico heheeh :lol: ! sexta-feira é difícil de utilizar o lado lógico de cérebro kkkkProfavor se alguém poder dar uma luz?Agradeço desde já! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 29, 2011 Denunciar Share Postado Abril 29, 2011 exemplo:procedure TForm1.Button1Click(Sender: TObject); var h1,h2,h3,h4, tot : TTime; begin h1 := strtotime('02:00:12'); h2 := strtotime('00:40:14'); h3 := strtotime('01:30:42'); h4 := strtotime('00:25:15'); tot := h1+h2+h3+h4; label1.Caption := timetostr(tot); end;basta adaptar o código se for para ler um campo da tabelaabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 jaumDoDelphi Postado Maio 2, 2011 Autor Denunciar Share Postado Maio 2, 2011 Jhonas obrigado meu amigo.Alterei as variaveis para "TTime"Mas ainda ele não esta somando as horas corretamente.Ou melhor somando corretamente ele esta sim, mas na hora de exibir o resultado TOTAL de HORAS ele exibe da seguinte forma.HORAS TOTAIS11:00 + 10:00 + 12:00 + 14:30 + 15:50 = 15:20Mas como assim??? o total somando de horas na verdade seria 63:20 (sessenta e tres horas e vinte minutos)e não 15:20 (quinze horas e vinte minutos)dai fiquei vendo e percebi uma coisa muito peculiar, a soma esta correta mas ao invez dele me retornar as horas somadasele esta retornando como "2 dias 15 horas e 20 minutos" dai sempre me retorna só as horas no meu LABEL total de horas.Segue o codigo abaixo:var h1, h2, tot : TTime; begin h1 := STRtoTIME(DM.ADOQhoraHORA_TT.Text); h2 := STRtoTIME(lblHT.Caption); //DM.ADOQhora.First; //while not DM.ADOQhora.Eof do // begin tot := h1 + h2; // DM.ADOQhora.Next; // end; lblHT.Caption := TimeToSTR(tot)O maior problema estaria no final para ser exibida o total de horas!alguém ai sabe o comando para me voltar o total de horas sem contar 24h = 1 dia??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 2, 2011 Denunciar Share Postado Maio 2, 2011 HORAS TOTAIS11:00 + 10:00 + 12:00 + 14:30 + 15:50 = 15:20Mas como assim??? o total somando de horas na verdade seria 63:20 (sessenta e tres horas e vinte minutos)e não 15:20 (quinze horas e vinte minutos)achei que voce ia sacar o lance de que o somatório de valores time, sempre retorna um valor decimalexemplo: sendo t uma variavel do tipo real e h* do tipo TTimeh1 := strtotime('11:00:00'); h2 := strtotime('10:00:00'); h3 := strtotime('12:00:00'); h4 := strtotime('14:30:00'); h5 := strtotime('15:50:00'); t := h1+h2+h3+h4+h5; seria o mesmo que : t := 0,45833333333 + 0,4166666667 + 0,5 + 0,6972222222 + 0,65972222222 então voce poderia fazer uma conversão do valor decimal para hora ----------------------------------------------------------------------------- outra possibilidade seria converter as horas em segundos e depois fazer o somátorio exemplo: uses DateUtils; //Função converter Segundos para Horas function Seg_Hora( Seg:LongInt ):string; Var Hora,Min:LongInt; Tmp : Double; begin Tmp := Seg / 3600; Hora := Round(Int(Tmp)); Seg := Round(Seg - (Hora*3600)); Tmp := Seg / 60; Min := Round(Int(Tmp)); Seg := Round(Seg - (Min*60)); Result := FormatFloat( '00', Hora )+ ':' + FormatFloat( '00', Min ) + ':' + FormatFloat( '00', Seg ); end; procedure TForm1.Button1Click(Sender: TObject); var h1,h2,h3,h4,h5, tot : TTime; seg : integer; begin //11:00 + 10:00 + 12:00 + 14:30 + 15:50 = 63:20:00 seg := 0; h1 := strtotime('11:00:00'); h2 := strtotime('10:00:00'); h3 := strtotime('12:00:00'); h4 := strtotime('14:30:00'); h5 := strtotime('15:50:00'); seg := seg + SecondsBetween(0,h1); seg := seg + SecondsBetween(0,h2); seg := seg + SecondsBetween(0,h3); seg := seg + SecondsBetween(0,h4); seg := seg + SecondsBetween(0,h5); label1.Caption := Seg_Hora(seg); end;o resultado final sera: 63:20:00abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 jaumDoDelphi Postado Maio 2, 2011 Autor Denunciar Share Postado Maio 2, 2011 Jhonas novamente muito Obrigado! :) Agora sim esta [RESOLVIDO] este meu problema com os cálculos de horas.Parece simples somar horas mas vi que isso não mudou muito desde a década passada como na época do CLIPPER.Ultimas vez que fiz um aplicativo para soma de hora me lembro que foi na época que estudei um pouco de clipper nos anos 90.Mas ao passar dos anos sempre utilizei o MS EXCELL e tinha me esquecido que 1Hora não é 100 kkkk!A sua ajuda foi Extremamente util principalmente na Function esta função me ajudou muito mesmo, e vai ajudar mta gente nova que esta começando a mergulhar no mundo do Delphi, vale nota 10!abaixo o código final, funcionando perfeitamente com a sua Função "Seg_hora"procedure TfHORA.btnTMPCALCClick(Sender: TObject); var h1,h2 : TTime; seg : integer; begin seg := 0; lblHT.Caption := '00:00:00'; DM.ADOQhora.First; while not DM.ADOQhora.Eof do begin h1 := STRtoTIME(DM.ADOQhoraHORA_TT.Text); h2 := STRtoTIME(lblHT.Caption); seg := seg + SecondsBetween(0,h1); seg := seg + SecondsBetween(0,h2); DM.ADOQhora.Next; end; lblHT.Caption := Seg_Hora(seg); end;muito obrigado e um grande abraço! :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
jaumDoDelphi
Ola amigos do ScriptBrasil, boa tarde!
Estou com um problema simples mais ao mesmo tempo complicado "FALTA de LOGICA" :(
Tenho um programa bem simples de controle de horas, estou fazendo ele com:
- Delphi 2010
- DBAccess
- ADOQuery
A Tabela é simples tem hora de chegada e saida e total com uma tabela mestre com o MÊS atual. "segue a imagem abaixo"
O calculo de hora de entrada/saida é diariamente.
Mas no final do mês eu gostaria que somassem todas as horas do campo "HORA_T"
dai eu tentei desta forma eu sei que estou errado mais acho que quase isso:
Com este código atual não soma nada, Sim é um problema lógico heheeh :lol: ! sexta-feira é difícil de utilizar o lado lógico de cérebro kkkk
Profavor se alguém poder dar uma luz?
Agradeço desde já!
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.