Loop que não quer da certo
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
Curtidas 0
Respostas
Sanses
25/11/2004
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
GOSTEI 0
Emerson Nascimento
25/11/2004
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;
GOSTEI 0