Fórum Loop que não quer da certo #259872
25/11/2004
0
colegas..
numa tabela de entrada de produtos, preciso num loop, entrar com determinados produtos em meu estoque. criei esse loop mas só entra com os primeiros 02 produtos. o resto simplesmente e ignorado, não altera nada na tabela de produtos. será onde que eu errei nesse loop?
procedure TFrmEntraProd.SpeedButton1Click(Sender: TObject);
Var conta,item:Integer;
begin
if Application.MessageBox(´Deseja Realmente entrar com estes produtos em seu estoque?´,´Produtos ´,MB_YESNO+MB_ICONQUESTION)<>ID_YES then
QProd.close;
QProd.open;
conta:=0;
item:=QProd.RecordCount;
QProd.First;
While not QProd.Eof do
try
begin
gauge.Progress:=conta;
tbProd.Findkey([QProdCodProd.Value]);
tbProd.edit;
tbProd.Fieldbyname(´CM_QNTEST´).Value:=tbProd.fieldbyname(´CM_QNTEST´).value+QProd.Fieldbyname(´qtde´).value;
tbProd.Fieldbyname(´CM_PERCVE´).value:=QProd.Fieldbyname(´ETIQ´).Value;
tbProd.Fieldbyname(´CM_PCUSTO´).value:=QProd.Fieldbyname(´CustoRDia´).Value;
tbProd.FieldByName(´CM_CUSTOBRT´).value:=tbProdCM_PCUSTO.value*(100 + tbProdCM_PERC.value)/100;
tbProd.Fieldbyname(´CM_PVENDA´).value:=(tbProd.Fieldbyname(´CM_CUSTOBRT´).Value*(100+tbprod.fieldbyname(´CM_PERCVE´).value)/100);
tbprod.Fieldbyname(´CM_DATENT´).value:=DATE;
tbProd.Post;
gauge.Progress:=conta+1*100;
item:=item+1;
QProd.Next;
end;
finally
//ShowMessage(´Foi alterado em seu estoque ´+IntToStr(item)+´ Produtos!!´);
btVai.onclick(nil);
gauge.Progress:=0;
//DMDados.tbEntraProd.Refresh;
DBGrid1.Enabled:=false;
end;
end;
grato:
Jose luiz
numa tabela de entrada de produtos, preciso num loop, entrar com determinados produtos em meu estoque. criei esse loop mas só entra com os primeiros 02 produtos. o resto simplesmente e ignorado, não altera nada na tabela de produtos. será onde que eu errei nesse loop?
procedure TFrmEntraProd.SpeedButton1Click(Sender: TObject);
Var conta,item:Integer;
begin
if Application.MessageBox(´Deseja Realmente entrar com estes produtos em seu estoque?´,´Produtos ´,MB_YESNO+MB_ICONQUESTION)<>ID_YES then
QProd.close;
QProd.open;
conta:=0;
item:=QProd.RecordCount;
QProd.First;
While not QProd.Eof do
try
begin
gauge.Progress:=conta;
tbProd.Findkey([QProdCodProd.Value]);
tbProd.edit;
tbProd.Fieldbyname(´CM_QNTEST´).Value:=tbProd.fieldbyname(´CM_QNTEST´).value+QProd.Fieldbyname(´qtde´).value;
tbProd.Fieldbyname(´CM_PERCVE´).value:=QProd.Fieldbyname(´ETIQ´).Value;
tbProd.Fieldbyname(´CM_PCUSTO´).value:=QProd.Fieldbyname(´CustoRDia´).Value;
tbProd.FieldByName(´CM_CUSTOBRT´).value:=tbProdCM_PCUSTO.value*(100 + tbProdCM_PERC.value)/100;
tbProd.Fieldbyname(´CM_PVENDA´).value:=(tbProd.Fieldbyname(´CM_CUSTOBRT´).Value*(100+tbprod.fieldbyname(´CM_PERCVE´).value)/100);
tbprod.Fieldbyname(´CM_DATENT´).value:=DATE;
tbProd.Post;
gauge.Progress:=conta+1*100;
item:=item+1;
QProd.Next;
end;
finally
//ShowMessage(´Foi alterado em seu estoque ´+IntToStr(item)+´ Produtos!!´);
btVai.onclick(nil);
gauge.Progress:=0;
//DMDados.tbEntraProd.Refresh;
DBGrid1.Enabled:=false;
end;
end;
grato:
Jose luiz
Jose Luiz
Curtir tópico
+ 0
Responder
Posts
25/11/2004
Sanses
no seu código voce se refere a variavel item como contador, mas não esta o utilizando para gravar so dados no banco, apenas no final da instrução vc incrementa com: item:=item+1;
Seria interessante você utiliza-lo corretamente num laço tipo For..to..do, talvez resolvesse...outra coisa, quando vc abre a querie, de um last antes do first....
Espero ter ajudado!
Sanses
Seria interessante você utiliza-lo corretamente num laço tipo For..to..do, talvez resolvesse...outra coisa, quando vc abre a querie, de um last antes do first....
Espero ter ajudado!
Sanses
Responder
Gostei + 0
25/11/2004
Emerson Nascimento
procedure TFrmEntraProd.SpeedButton1Click(Sender: TObject);
Var
    conta,item:Integer;
begin
    if Application.MessageBox(´Deseja Realmente entrar com estes produtos em seu estoque?´,´Produtos ´,MB_YESNO+MB_ICONQUESTION)=ID_YES then
    begin
        QProd.close; // isso é realmente necessário?
        QProd.open;
        conta:=0;
        item:=0;
        // faca assim para incrementar o gauge mais facilmente
        gauge.MaxValue:=QProd.RecordCount;
        QProd.First;
        While not QProd.Eof do
        begin
            // é assim mesmo, não tem begin
            if tbProd.Findkey([QProdCodProd.Value]) then
                try
                    tbProd.edit;
                    tbProd.Fieldbyname(´CM_QNTEST´).Value:=tbProd.fieldbyname(´CM_QNTEST´).value+QProd.Fieldbyname(´qtde´).value;
                    tbProd.Fieldbyname(´CM_PERCVE´).value:=QProd.Fieldbyname(´ETIQ´).Value;
                    tbProd.Fieldbyname(´CM_PCUSTO´).value:=QProd.Fieldbyname(´CustoRDia´).Value;
                    tbProd.FieldByName(´CM_CUSTOBRT´).value:=tbProdCM_PCUSTO.value*(100 + tbProdCM_PERC.value)/100;
                    tbProd.Fieldbyname(´CM_PVENDA´).value:=(tbProd.Fieldbyname(´CM_CUSTOBRT´).Value*(100+tbprod.fieldbyname(´CM_PERCVE´).value)/100);
                    tbprod.Fieldbyname(´CM_DATENT´).value:=DATE;
                    tbProd.Post;
                    inc(item);
                except
                end;
            // aqui você incrementa o gauge
            gauge.AddProgress(1);
            QProd.Next;
        end;
    end;
    ShowMessage(´Foi alterado em seu estoque ´+IntToStr(item)+´ Produtos!!´);
    btVai.onclick(nil);
    gauge.Progress:=0;
    //DMDados.tbEntraProd.Refresh;
    DBGrid1.Enabled:=false;
end;
Var
    conta,item:Integer;
begin
    if Application.MessageBox(´Deseja Realmente entrar com estes produtos em seu estoque?´,´Produtos ´,MB_YESNO+MB_ICONQUESTION)=ID_YES then
    begin
        QProd.close; // isso é realmente necessário?
        QProd.open;
        conta:=0;
        item:=0;
        // faca assim para incrementar o gauge mais facilmente
        gauge.MaxValue:=QProd.RecordCount;
        QProd.First;
        While not QProd.Eof do
        begin
            // é assim mesmo, não tem begin
            if tbProd.Findkey([QProdCodProd.Value]) then
                try
                    tbProd.edit;
                    tbProd.Fieldbyname(´CM_QNTEST´).Value:=tbProd.fieldbyname(´CM_QNTEST´).value+QProd.Fieldbyname(´qtde´).value;
                    tbProd.Fieldbyname(´CM_PERCVE´).value:=QProd.Fieldbyname(´ETIQ´).Value;
                    tbProd.Fieldbyname(´CM_PCUSTO´).value:=QProd.Fieldbyname(´CustoRDia´).Value;
                    tbProd.FieldByName(´CM_CUSTOBRT´).value:=tbProdCM_PCUSTO.value*(100 + tbProdCM_PERC.value)/100;
                    tbProd.Fieldbyname(´CM_PVENDA´).value:=(tbProd.Fieldbyname(´CM_CUSTOBRT´).Value*(100+tbprod.fieldbyname(´CM_PERCVE´).value)/100);
                    tbprod.Fieldbyname(´CM_DATENT´).value:=DATE;
                    tbProd.Post;
                    inc(item);
                except
                end;
            // aqui você incrementa o gauge
            gauge.AddProgress(1);
            QProd.Next;
        end;
    end;
    ShowMessage(´Foi alterado em seu estoque ´+IntToStr(item)+´ Produtos!!´);
    btVai.onclick(nil);
    gauge.Progress:=0;
    //DMDados.tbEntraProd.Refresh;
    DBGrid1.Enabled:=false;
end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)