query loop infinito - Lógica errada?

28/04/2003

0

Este meu loop que está em vermelho, fica em um loop infinito, qdo chega ao final da query o programa trava.
A lógica está errada? Como posso fazer um loop que ele faça alguma coisa até chegar ao final da query?


[color=red:e9764e2efa] while not (qryVeiculo.Eof) do begin[/color:e9764e2efa] // copia os registros pra POTMV
HoraTH :=0 ; MinTH:=0; MSegTH:=0;
tblTempVeiculo.Insert;
tblTempVeiculoTMCARRO.AsString := qryVeiculoSSCOD.AsString;
tblTempVeiculoTMDATA.AsDateTime := qryVeiculoCSDATA.AsDateTime;
tblTempVeiculoTMTOTALHORA.AsString := qryVeiculoCSHORAS.AsString;
tblTempVeiculo.Post;
qryVeiculo.Next;
while qryVeiculo.FieldByName(´SSCOD´).Value = tblTempVeiculo.FieldByName(´TMCARRO´).Value do begin
tblTempVeiculo.Edit;
auxiliar := tblTempVeiculoTMTOTALHORA.AsString;
SomaHor := StrToTime(auxiliar) + StrToTime(qryVeiculoCSHORAS.AsString);
tblTempVeiculoTMTOTALHORA.AsString := TimeToStr(SomaHor);
tblTempVeiculo.Post;
qryVeiculo.Next;
end;
end;


Debora

Debora

Responder

Posts

28/04/2003

Rodrigo Ferreira

Ei coloca nao sei se isto ira funcionar mas, se vc visualizar bem seu codigo vai perceber que eu fiz algumas modificacoes entao copie e execute.

qryVeiculo.First;
while not (qryVeiculo.Eof) do
begin
HoraTH :=0 ; MinTH:=0; MSegTH:=0;
tblTempVeiculo.Insert;
tblTempVeiculoTMCARRO.AsString := qryVeiculoSSCOD.AsString;
tblTempVeiculoTMDATA.AsDateTime := qryVeiculoCSDATA.AsDateTime;
tblTempVeiculoTMTOTALHORA.AsString := qryVeiculoCSHORAS.AsString;
tblTempVeiculo.Post;

if qryVeiculo.FieldByName(´SSCOD´).Value = tblTempVeiculo.FieldByName(´TMCARRO´).Value then
begin
tblTempVeiculo.Edit;
auxiliar := tblTempVeiculoTMTOTALHORA.AsString;
SomaHor := StrToTime(auxiliar) + StrToTime(qryVeiculoCSHORAS.AsString);
tblTempVeiculoTMTOTALHORA.AsString := TimeToStr(SomaHor);
tblTempVeiculo.Post;
end;

qryVeiculo.Next;
end;
:wink:


Responder

28/04/2003

Schumacher

Débora,


Reparei que você esta utilizando um loop dentro do outro utilizando a mesma Query. Isso trava o seu sistema, você precisa encerrar um loop antes de começar o outro.

Exemplo com seu código arrumado:

while not (qryVeiculo.Eof) do begin // copia os registros pra POTMV
HoraTH :=0 ; MinTH:=0; MSegTH:=0;
tblTempVeiculo.Insert;
tblTempVeiculoTMCARRO.AsString := qryVeiculoSSCOD.AsString;
tblTempVeiculoTMDATA.AsDateTime := qryVeiculoCSDATA.AsDateTime;
tblTempVeiculoTMTOTALHORA.AsString := qryVeiculoCSHORAS.AsString;
tblTempVeiculo.Post;
qryVeiculo.Next;
[b:ed9a7891b5]end;[/b:ed9a7891b5] // Faltava este END
// Aqui começa a segunda Query
while qryVeiculo.FieldByName(´SSCOD´).Value = tblTempVeiculo.FieldByName(´TMCARRO´).Value do begin
tblTempVeiculo.Edit;
auxiliar := tblTempVeiculoTMTOTALHORA.AsString;
SomaHor := StrToTime(auxiliar) + StrToTime(qryVeiculoCSHORAS.AsString);
tblTempVeiculoTMTOTALHORA.AsString := TimeToStr(SomaHor);
tblTempVeiculo.Post;
qryVeiculo.Next;
end;


Responder

28/04/2003

Rodrigo Ferreira

Uma pequena correcao

qryVeiculo.First;
HoraTH :=0 ; MinTH:=0; MSegTH:=0;
while not (qryVeiculo.Eof) do
begin
tblTempVeiculo.Insert;
tblTempVeiculoTMCARRO.AsString := qryVeiculoSSCOD.AsString;
tblTempVeiculoTMDATA.AsDateTime := qryVeiculoCSDATA.AsDateTime;
tblTempVeiculoTMTOTALHORA.AsString := qryVeiculoCSHORAS.AsString;
tblTempVeiculo.Post;

if qryVeiculo.FieldByName(´SSCOD´).Value = tblTempVeiculo.FieldByName(´TMCARRO´).Value then
begin
tblTempVeiculo.Edit;
auxiliar := tblTempVeiculoTMTOTALHORA.AsString;
SomaHor := StrToTime(auxiliar) + StrToTime(qryVeiculoCSHORAS.AsString);
tblTempVeiculoTMTOTALHORA.AsString := TimeToStr(SomaHor);
tblTempVeiculo.Post;
end;

qryVeiculo.Next;
end;


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar