While o que esta errado Tá dificl

Delphi

26/02/2003

o problema é o while naum tá fazendo efeito nenhum aqui pq , a condição if esta certa se eu desabilitar o while o IF funciona , porém naum muda de registro com next .. o que fazer ?

while not qrgridfrete.eof do
begin
if (strtoint(txtpeso.Text) >= (qrgridfrete.FieldByName(´faixa_inicial´)).Value) and (strtoint(txtpeso.Text) <= (qrgridfrete.FieldByName(´faixa_final´)).Value) then
begin
txtfaixavalorfrete.Text := qrgridfrete.FieldByName(´valor´).AsString;
end
else
begin
qrgridfrete.Next;
end
end;
end;


Anonymous

Anonymous

Curtidas 0

Respostas

Anonymous

Anonymous

26/02/2003

Mudei o procedimento v^c funciona agora...

qrgridfrete.First;
while not qrgridfrete.eof do
begin
if (strtoint(txtpeso.Text) >= (qrgridfrete.FieldByName(´faixa_inicial´).Value)) and (strtoint(txtpeso.Text) <= (qrgridfrete.FieldByName(´faixa_final´).Value)) then
begin
txtfaixavalorfrete.Text := qrgridfrete.FieldByName(´valor´).AsString;
qrgridfrete.Next; // aki tb precisa do Next
end ;
else
begin
qrgridfrete.Next;
end
end;
end;


vê c funciona dinovo


GOSTEI 0
Anonymous

Anonymous

26/02/2003

tente assim:

qrgridfrete.first;
while not qrgridfrete.eof do
begin

if (strtoint(txtpeso.Text) >= (qrgridfrete.FieldByName(´faixa_inicial´)).Value) and (strtoint(txtpeso.Text) <= (qrgridfrete.FieldByName(´faixa_final´)).Value) then

txtfaixavalorfrete.Text := qrgridfrete.FieldByName(´valor´).AsString;

qrgridfrete.Next;

end;

no seu caso o next ta tabela tem que sempre acontecer senão o While vai entrar em um Loop eterno...


Falou.
Leandro
ICQ 128124370


GOSTEI 0
Anonymous

Anonymous

26/02/2003

O seu problema, é que quando vc entra no IF, acaba entrando em um loop infinito... Vc deve utilizar o next mesmo quando o IF for positivo, para com isso ler até o fim da tabela e satisfazer a condição do while, ou então sair do laço do while quando o if for positivo...

Espero ter ajudado...

:wink:


GOSTEI 0
Anonymous

Anonymous

26/02/2003

Primeiro, a identação precisa ser melhorada.
olha só o código abaixo:

while not qrgridfrete.eof do begin
if (strtoint(txtpeso.Text) >= (qrgridfrete.FieldByName(´faixa_inicial´).Value) and
(strtoint(txtpeso.Text) <= (qrgridfrete.FieldByName(´faixa_final´).Value) then
txtfaixavalorfrete.Text := qrgridfrete.FieldByName(´valor´).AsString
else
qrgridfrete.Next;
end;

Segundo, a propriedade fieldByName estava sendo utilizada errada.
verifique que você colocou dois parenteses para fechá-la.

Terceiro, este if nunca será verdadeiro
Não se compara Text com Value. (apesar de Value ser variant ele vem truncado sem os ´0´, o que faz diferença na hora de comparar)

Quarto, utilize FieldByName(´´).AsString;

Valeu.


GOSTEI 0
POSTAR