problemas com quot;whilequot;
25/01/2006
0
A idéia é a seguinte após o usuario digitar a quantidade:
´enquanto a quantidade nao for = zero fassa ´
o problema que está acontecendo é o seguinte: nao acontece nada!, nao vejo o edit decrementando valores e nada é salvo na tabela....
desconfio que o problema esta na linha: ´while not quantidade=0 do´
abraços!
procedure TForm1.Button3Click(Sender: TObject); var soma, quantidade, cod : integer; begin quantidade := StrToInt(Edit_quantidade.Text); Soma := quantidade - 1; while not quantidade=0 do begin // Contador de codigo Tbl_Etiquetas.Open; Tbl_Etiquetas.Last; Cod := Tbl_EtiquetasCODIGO.AsInteger + 1; Label_Codigo.Caption := IntToStr(Cod); //-------------------------------------- // salva em uma tabela temporaria Tbl_Etiquetas.Insert; Tbl_EtiquetasCODIGO.AsInteger := Cod; Tbl_EtiquetasCODIGO_E.AsInteger := Tbl_ProdutosCODIGO.AsInteger; Tbl_EtiquetasNOME.AsString := Tbl_ProdutosNOME.AsString; Tbl_Etiquetas.Post; Tbl_Etiquetas.ApplyUpdates; // diminui o valor contido no edit para o while verificar se ja chegou a zero Edit_quantidade.Text := IntToStr(soma); end; end;
Mahdak
Posts
25/01/2006
Macario
Outra coisa seu while esta errado mesmo, pois voce não esta impondo decremento a condição de parada.
Voce esta pegando dados de uma mesma tabela e o inserindo novamente?!?!
Colega esta muito confuso este seu codigo...para que possa entender o que voce necessita.
25/01/2006
Sabe.geraldo
Ex.: quantidade := ( quantidade - 1 );
25/01/2006
Michael
while quantidade > 0 do begin soma := Pred(quantidade); // O mesmo que quantidade - 1 ... Dec(quantidade); // O mesmo que quantidade := quantidade - 1; end;
E, como o colega [b:76bd38d77f]Macario [/b:76bd38d77f]disse, vc poderia usar um loop [b:76bd38d77f]for [/b:76bd38d77f]aqui, pois o intervalo a ser percorrido é conhecido.
for I:= quantidade downto 1 do ...
[]´s
25/01/2006
Mahdak
alguem poderia me dar uma mão? é que eu tenho que entregar isso para o cliente hoje ainda...
Abraços...
25/01/2006
Rjun
25/01/2006
Mahdak
procedure TForm1.Button3Click(Sender: TObject); var soma, quantidade, cod,I : integer; begin quantidade := StrToInt(Edit_quantidade.Text); while quantidade > 0 do begin Soma := Pred(quantidade); for I:= quantidade downto 1 do begin // Contador de codigo Tbl_Etiquetas.Open; Tbl_Etiquetas.Last; Cod := Tbl_EtiquetasCODIGO.AsInteger + 1; Label_Codigo.Caption := IntToStr(Cod); //-------------------------------------- // salva em uma tabela temporaria Tbl_Etiquetas.Insert; Tbl_EtiquetasCODIGO.AsInteger := Cod; Tbl_EtiquetasCODIGO_E.AsInteger := StrToInt(edit_codigo.Text); Tbl_EtiquetasNOME.AsString := edit_produto.Text; Tbl_Etiquetas.Post; Tbl_Etiquetas.ApplyUpdates; // diminui o valor contido no edit para o while verificar se ja chegou a zero Edit_quantidade.Text := IntToStr(soma); end; end; end;
25/01/2006
Edilcimar
25/01/2006
Mahdak
abração!!!!!
procedure TForm1.Button3Click(Sender: TObject); var soma, quantidade, cod,I : integer; begin quantidade := StrToInt(Edit_quantidade.Text); while quantidade > 0 do begin Soma := Pred(quantidade); for I:= quantidade downto 1 do begin // Contador de codigo Tbl_Etiquetas.Open; Tbl_Etiquetas.Last; Cod := Tbl_EtiquetasCODIGO.AsInteger + 1; Label_Codigo.Caption := IntToStr(Cod); //-------------------------------------- // salva em uma tabela temporaria Tbl_Etiquetas.Insert; Tbl_EtiquetasCODIGO.AsInteger := Cod; Tbl_EtiquetasCODIGO_E.AsInteger := StrToInt(edit_codigo.Text); Tbl_EtiquetasNOME.AsString := edit_produto.Text; Tbl_Etiquetas.Post; Tbl_Etiquetas.ApplyUpdates; // diminui o valor contido no edit para o while verificar se ja chegou a zero Dec(quantidade); Edit_quantidade.Text := IntToStr(quantidade); end; end; end;
25/01/2006
Rjun
procedure TForm1.Button3Click(Sender: TObject); var Quantidade, i: Integer; begin Quantidade := StrToInt(Edit_quantidade.Text); for i := Quantidade downto 1 do begin // Contador de codigo Tbl_Etiquetas.Open; Tbl_Etiquetas.Last; Cod := Tbl_EtiquetasCODIGO.AsInteger + 1; Label_Codigo.Caption := IntToStr(Cod); //-------------------------------------- // salva em uma tabela temporaria Tbl_Etiquetas.Insert; Tbl_EtiquetasCODIGO.AsInteger := Cod; Tbl_EtiquetasCODIGO_E.AsInteger := StrToInt(edit_codigo.Text); Tbl_EtiquetasNOME.AsString := edit_produto.Text; Tbl_Etiquetas.Post; Tbl_Etiquetas.ApplyUpdates; Edit_quantidade.Text := IntToStr(i); end; end;
25/01/2006
Michael
Outro problema é que vc está mudando o valor do contador [b:c78cf67f8f]I[/b:c78cf67f8f] dentro do loop [b:c78cf67f8f]for[/b:c78cf67f8f], e isso é totalmente desaconselhável, pois pode resultar em loops eternos.
Do jeito que está, o loop while só é executado uma vez, pois o valor de quantidade é decrementado até 0 - em uma ordem não linear, pois tanto o loop for quanto [b:c78cf67f8f]Dec(Quantidade)[/b:c78cf67f8f] mudam seu valor.
Use [b:c78cf67f8f]while [/b:c78cf67f8f]ou [b:c78cf67f8f]for [/b:c78cf67f8f]no seu caso. Não os dois, pelo menos do jeito que está.
[]´s
25/01/2006
Mahdak
muito obrigado pela atenção! :D
abraços!
Clique aqui para fazer login e interagir na Comunidade :)