Fórum Não quer dar certo soma de campo calculado #171994
28/07/2003
0
Var WTotal : TDateTime;
begin
WTotal:=0;
TbPonto.First;
While not TbPonto.Eof do
Begin
WTotal:=WTotal+TbPontoHEXTRA.Value;
TbPonto.Next;
End;
QRLabel11.Caption := TimeToStr(WTotal);
Uso table paradox, alguém pode me ajudar?
Janete
Curtir tópico
+ 0Posts
29/07/2003
Mabh
Quando somamos horas usando variáveis do tipo TDateTime ou TTime e o resultado excede 24 horas a variável é zerada, ou seja ´13:00:00´ + ´14:00:00´ é igual a ´03:00:00´ e não 27:00:00 como seria esperado. A maneira mais fácil de resolver este problema é converter as horas, minutos e segundos para uma base inteira, para então somar os valores e depois converter o total para o formato horário novamente.
Espero ter ajudado
Márcio
Gostei + 0
29/07/2003
Janete
Gostei + 0
29/07/2003
Djjunior
O que eu fiz nela foi transformar tudo em minutos para depois calcular
djr
ps qualquer duvida me manda um email que eu te explico melhor
ps2 se quizer eu tenho outra para subtração (beeeem mais simples)
procedure TTPonto.Button3Click(Sender: TObject);
Var HorasE, MinE, HorasA, MinA, TotalE, TotalA, Resulta, i, Faltas, Abonos: integer;
TotHoras, TotMin: Real;
HoraT, MinT: string;
begin
HorasE := 0;
MinE := 0;
HorasA := 0;
MinA := 0;
Faltas := 0;
Abonos:= 0;
Globais.Ponto.First;
For i := 0 to Globais.Ponto.RecordCount do begin
If (Globais.PontoResultado.Text = ´E´) or (Globais.PontoResultado.Text = ´X´) then begin
HorasE := HorasE + StrToInt(copy(Globais.PontoExtraAtrazo.Text,1,2));
MinE := MinE + StrToInt(copy(Globais.PontoExtraAtrazo.Text,4,2));
end Else If (Globais.PontoResultado.Text = ´A´) or (Globais.PontoResultado.Text = ´T´) then begin
HorasA := HorasA + StrToInt(copy(Globais.PontoExtraAtrazo.Text,1,2));
MinA := MinA + StrToInt(copy(Globais.PontoExtraAtrazo.Text,4,2));
end Else If Globais.PontoResultado.Text = ´F´ then
Inc(Faltas)
else If Globais.PontoResultado.Text = ´B´ then
Inc(Abonos);
Globais.Ponto.Next;
end;
TotalE := (HorasE * 60) + MinE;
TotalA := (HorasA * 60) + MinA;
If TotalE >= TotalA then
Resulta := TotalE - TotalA
else
Resulta := TotalA - TotalE;
TotHoras := Int(Resulta/60);
TotMin := Resulta mod 60;
If TotHoras < 10 then
HoraT := ´0´ + FloatToStr(TotHoras)
Else HoraT := FloatToStr(TotHoras);
If TotMin < 10 then
MinT := ´0´ + FloatToStr(TotMin)
Else MinT := FloatToStr(TotMin);
Label17.Caption := HoraT + ´:´ + MinT;
TotHoras := Int(TotalE/60);
TotMin := TotalE mod 60;
If TotHoras < 10 then
HoraT := ´0´ + FloatToStr(TotHoras)
Else HoraT := FloatToStr(TotHoras);
If TotMin < 10 then
MinT := ´0´ + FloatToStr(TotMin)
Else MinT := FloatToStr(TotMin);
Label16.Caption := HoraT + ´:´ + MinT;;
TotHoras := Int(TotalA/60);
TotMin := TotalA mod 60;
If TotHoras < 10 then
HoraT := ´0´ + FloatToStr(TotHoras)
Else HoraT := FloatToStr(TotHoras);
If TotMin < 10 then
MinT := ´0´ + FloatToStr(TotMin)
Else MinT := FloatToStr(TotMin);
Label18.Caption := HoraT + ´:´ + MinT;;
Label20.Caption := IntToStr(Faltas);
Label24.Caption := IntToStr(Abonos);
end;
Gostei + 0
04/08/2003
Mabh
Márcio.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)