comando while...como faço...loop...
08/03/2006
0
no comando do while tenho que testar um campo e caso este campo retorne False...tenho que dar um Next e continuar a testar os outros registro...tipo assim:
while not tblfuncionarios.eof do
begin
IF tblFuncionarios.FieldByName(´causa__fu´).AsInteger <> 0 then
begin
IF (yyear(tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) =
StrToInt(delphiRight(mesano,4))) then
begin
IF (ymonth(tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) <
StrToInt(delphiLeft(periodo_w,4))) or
((ymonth(.tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) >
StrToInt(delphiLeft(periodo_w,4))) then
tblFuncionarios.Next;
>>>>aqui eu gostaria de dar um loop e continuar do while novamente para os testes dos outros funcionarios
end;
end
else
begin
-----
----- aqui o restante dos comando e buscas
-----
end;
end;
para quem ja trabalho com o clipper existe o comando dentro do while que vai para o final do enddo e continua no proximo registro...tipo assim :
do while .not. eof ()
IF day (fun->rescis_fu) > 0 .or. fun->causa__fu <> 0
IF year (fun->rescis_fu) = val (RIGHT (mesano, 4))
IF month (fun->rescis_fu) < val (LEFT (periodo_w, 2)) .or. month (fun->rescis_fu) > val (LEFT (periodo_w, 2))
skip 1 <<<aqui e o proximo registro
loop <<<<< aqui dao o loop e vai para o final do while
ENDIF
ENDIF
IF year (fun->rescis_fu) < val (RIGHT (mesano, 4))
skip 1
loop
ENDIF
else
IF month (fun->admiss_fu) > val (LEFT (periodo_w, 2)) .and. year (fun->admiss_fu) = val (RIGHT (mesano, 4))
skip 1
loop
ENDIF
IF year (fun->admiss_fu) < val (RIGHT (mesano, 4))
IF month (fun->admiss_fu) <= val (LEFT (periodo_w, 2)) .or. month (fun->admiss_fu) >= val (LEFT (periodo_w, 2))
skip 1
loop
ENDIF
else
IF year (fun->admiss_fu) = val (RIGHT (mesano, 4))
IF month (fun->admiss_fu) < val (LEFT (periodo_w, 2))
skip 1
loop
ENDIF
ENDIF
ENDIF
ENDIF
espero não esta sendo bastante confuso na minha explição...
valeu galera,
fabio
Cavalcanti.fabio
Posts
08/03/2006
Marco Salles
Fora isso o unico erro que eu vejo erro na sua estrutura é que o comando next , não pode depender especificamente de uma condição , sobre pena de ficar nun loop infinito
While not tblfuncionarios.eof do begin if condicao then //faça algo else //faca outro algo tblfuncionarios.next; end;
geralmente é usado desta maneira , salvo situaçoes , aonde se tem que sair do loop , caso alguma condição seja satisfeita , ai nesse caso o Next pode ficar dentro de um text
Tipo isso
While not tblfuncionarios.eof do begin if condicao then begin //faça algo tblfuncionarios.next end else begin //faca outro algo exit ; ou abort etc... end; end;
Ha , outro ero que vi , não sei se foi digitação , mas next sozinho , não compila no delphi.. No caso faltou o tblfuncionarios.next
Por mais é so:
08/03/2006
Marco Salles
Fora isso o unico erro que eu vejo erro na sua estrutura é que o comando next , não pode depender especificamente de uma condição , sobre pena de ficar nun loop infinito
While not tblfuncionarios.eof do begin if condicao then //faça algo else //faca outro algo tblfuncionarios.next; end;
geralmente é usado desta maneira , salvo situaçoes , aonde se tem que sair do loop , caso alguma condição seja satisfeita , ai nesse caso o Next pode ficar dentro de um text
Tipo isso
While not tblfuncionarios.eof do begin if condicao then begin //faça algo tblfuncionarios.next end else begin //faca outro algo exit ; ou abort etc... end; end;
Ha , outro ero que vi , não sei se foi digitação , mas next sozinho , não compila no delphi.. No caso faltou o tblfuncionarios.next
Por mais é so:
09/03/2006
Emerson Nascimento
while not tblfuncionarios.eof do begin IF (tblFuncionarios.FieldByName(´causa__fu´).AsInteger <> 0) and (yyear(tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) = StrToInt(delphiRight(mesano,4))) and ( (ymonth(tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) < StrToInt(delphiLeft(periodo_w,4))) or (ymonth(.tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) > StrToInt(delphiLeft(periodo_w,4))) ) then begin tblFuncionarios.Next; continue; <-- aqui continua o loop end else begin ----- ----- aqui o restante dos comando e buscas ----- end; end;
mas eu concordo com o Marco Salles: o next não deveria estar numa condição, sob pena de entrar num loop infinito. a versão que ilustra essa observação seria algo como:
while not tblfuncionarios.eof do begin IF not ( (tblFuncionarios.FieldByName(´causa__fu´).AsInteger <> 0) and (yyear(tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) = StrToInt(delphiRight(mesano,4))) and ( (ymonth(tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) < StrToInt(delphiLeft(periodo_w,4))) or (ymonth(.tblFuncionarios.FieldByName(´admiss_fu´).AsDateTime) > StrToInt(delphiLeft(periodo_w,4))) ) ) then begin ----- ----- aqui o restante dos comando e buscas ----- end; tblFuncionarios.Next; end;
Clique aqui para fazer login e interagir na Comunidade :)