como ativar laço com while dentro de outro while sem parar o while principal

Delphi

06/03/2012

boa tarde,

preciso de uma ajuda para executar o comando while com uma condição dentr4o do meu laço while principal, sem que o pricipal pare de ser executado.

segu parte do codigo interno não tenho idéia de como ficaria este codigo dentro meu laço principal se puderem me ajudar agradeço.
Wilson Leizico

Wilson Leizico

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

06/03/2012

Qual sua dúvida exatamente?
A estrutura é simples, um while dentro do outro. Para cada laço do while externo, serão executados laços no while interno desde que uma condição seja satisfeita.

Exemplo:

while X < 10 do
begin
Y := 0;
while Y < X do
begin
Y := Y + 0.1;
end;
X := X + 1;
end;

É um exemplo bem básico e até sem lógica a primeira vista, que faz o seguinte: um laço de 0 até 9 em X incrementando 1 e para cada valor de X, ele faz um laço de 0 até X - 0,1 incrementando Y de 0,1.
Realmente é bem bestinha, mas a ideia é mostrar a estrutura.

Boa sorte.
GOSTEI 0
Wilson Leizico

Wilson Leizico

06/03/2012

boa tarde ,
amigo meu laço é eterno ele fica rodando sem parar coletando dados que recebo na serial do PC.
na verdade quero executar uma condição que enquanto o campo normal for igual a N mostre pra mim num panel os dados registrados no bd. sem parar a minha leitura da serial.


no codigo abaixo enquanto normal = N ele executa e o laço principal para.

gostaria de saber se existe algo para o meu laço principal não parar.

trecho do meu codigo

var
mens:string;
i: integer ;
label mostra;
begin
if form1.evento.locate(normal,form1.edit19.text,[]) then
begin
mostra:
form1.evento.close;
form1.evento.sql.clear;
form1.evento.sql.add(select* from evento where normal = N );
form1.evento.open;
form1.evento.open;
form1.evento.First;
while not form1.evento.eof do
begin
mens:=inttostr(form1.eventoid.value)+ +form1.eventomensagem.value;
memo1.lines.add(mens);
sleep(1000);
form1.evento.Next;
end;
//form1.button3.click;
sleep(500);
goto mostra;
end
else
if form1.eventonormal.value = form1.edit19.text then
begin
form1.evento.close;
form1.evento.sql.clear;
form1.evento.sql.add(select* from evento where normal = S );
form1.evento.open;
end;
end;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

06/03/2012

Cara, no seu trecho de código você roda o laço enquanto não for lido o último registro de um DataSet e executa um Next(). Dessa forma, em algum momento seu DataSet vai apontar para o último registro e o while para.
Para você ter um loop dito eterno, a condição de parada NUNCA pode ser satisfeita. Por exemplo, while 2 > 1 será executado enquanto 2 for maior que 1, ou seja, sempre.
Reveja seu código e tente reestruturar.
GOSTEI 0
POSTAR