Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Faccruz

Loop Infinito - a 1ª vista está correto.

Recommended Posts

Tenho esse trecho de código onde está entrando em Loop Infinito, a primeira vista está tudo correto, qndo a minha tabela tem apenas um produto ele faz corretamente esse trecho, porém se acrescento mais de um produto ele entra em um loop. Como posso resolver isso?Código:procedure TFCadPedido.DBRG4Click(Sender: TObject);begin DMDados.TCadPedido2.First; while not DMDados.TCadPedido2.Eof do begin if DBRG4.ItemIndex = 0 then begin DMDados.TCadPedido.Edit; DMDados.TCadPedidoTipoPreco.Value := 'V'; DMDados.TCadPedido2.Edit; if IsProdPromocao( DMDados.TCadPedido2Cod_Prod.Value ) then DMDados.TCadPedido2VlrUnit.Value := ValorPromocao( DMDados.TCadPedido2Cod_Prod.Value ) else DMDados.TCadPedido2VlrUnit.Value := ValorVista( DMDados.TCadPedido2Cod_Prod.Value ); end else if DBRG4.ItemIndex = 1 then begin DMDados.TCadPedido.Edit; DMDados.TCadPedidoTipoPreco.Value := 'P'; DMDados.TCadPedido2.Edit; if IsProdPromocao( DMDados.TCadPedido2Cod_Prod.Value ) then DMDados.TCadPedido2VlrUnit.Value := ValorPromocao( DMDados.TCadPedido2Cod_Prod.Value ) else DMDados.TCadPedido2VlrUnit.Value := ValorPrazo( DMDados.TCadPedido2Cod_Prod.Value ); end; DMDados.TCadPedido2.Next; end;end;D7, BDE, Firebird.Desde já agradeço a atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está faltando um .post ?

 

 

e outra coisa...

 

ele não está perdendo o ponteiro da tabela ao inserir/editar???

 

 

pq ja tive esse problema...

 

ai usei um ponteiro e resolveu....

 

no caso, olhando por cima, acho q assim irá funcionar...

 

procedure TFCadPedido.DBRG4Click(Sender: TObject);var ponteiro : TBookmark;begin  DMDados.TCadPedido2.First;  while not DMDados.TCadPedido2.Eof do  begin	if DBRG4.ItemIndex = 0 then	begin	  DMDados.TCadPedido.Edit;	  DMDados.TCadPedidoTipoPreco.Value := 'V';	  DMDados.TCadPedido2.Edit;	  if IsProdPromocao( DMDados.TCadPedido2Cod_Prod.Value ) then		DMDados.TCadPedido2VlrUnit.Value := ValorPromocao( DMDados.TCadPedido2Cod_Prod.Value )	  else		DMDados.TCadPedido2VlrUnit.Value := ValorVista( DMDados.TCadPedido2Cod_Prod.Value );	end	else if DBRG4.ItemIndex = 1 then	begin	  DMDados.TCadPedido.Edit;	  DMDados.TCadPedidoTipoPreco.Value := 'P';	  ponteiro := DMDados.TCadPedido2.GetBookmark;	  DMDados.TCadPedido2.Edit;	  if IsProdPromocao( DMDados.TCadPedido2Cod_Prod.Value ) then		  DMDados.TCadPedido2VlrUnit.Value := ValorPromocao( DMDados.TCadPedido2Cod_Prod.Value )	  else		  DMDados.TCadPedido2VlrUnit.Value := ValorPrazo( DMDados.TCadPedido2Cod_Prod.Value );	  DMDados.TCadPedido2.Post;	  DMDados.TCadPedido2.GotoBookmark(ponteiro)	end;	DMDados.TCadPedido2.Next;  end;end;

 

depois posta aew se deu certo... beleza?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está faltando um .post ?

 

 

e outra coisa...

 

ele não está perdendo o ponteiro da tabela ao inserir/editar???

 

 

pq ja tive esse problema...

 

ai usei um ponteiro e resolveu....

 

no caso, olhando por cima, acho q assim irá funcionar...

 

procedure TFCadPedido.DBRG4Click(Sender: TObject);var ponteiro : TBookmark;begin  DMDados.TCadPedido2.First;  while not DMDados.TCadPedido2.Eof do  begin	if DBRG4.ItemIndex = 0 then	begin	  DMDados.TCadPedido.Edit;	  DMDados.TCadPedidoTipoPreco.Value := 'V';	  DMDados.TCadPedido2.Edit;	  if IsProdPromocao( DMDados.TCadPedido2Cod_Prod.Value ) then		DMDados.TCadPedido2VlrUnit.Value := ValorPromocao( DMDados.TCadPedido2Cod_Prod.Value )	  else		DMDados.TCadPedido2VlrUnit.Value := ValorVista( DMDados.TCadPedido2Cod_Prod.Value );	end	else if DBRG4.ItemIndex = 1 then	begin	  DMDados.TCadPedido.Edit;	  DMDados.TCadPedidoTipoPreco.Value := 'P';	  ponteiro := DMDados.TCadPedido2.GetBookmark;	  DMDados.TCadPedido2.Edit;	  if IsProdPromocao( DMDados.TCadPedido2Cod_Prod.Value ) then		  DMDados.TCadPedido2VlrUnit.Value := ValorPromocao( DMDados.TCadPedido2Cod_Prod.Value )	  else		  DMDados.TCadPedido2VlrUnit.Value := ValorPrazo( DMDados.TCadPedido2Cod_Prod.Value );	  DMDados.TCadPedido2.Post;	  DMDados.TCadPedido2.GotoBookmark(ponteiro)	end;	DMDados.TCadPedido2.Next;  end;end;

depois posta aew se deu certo... beleza?

Amigo... continua a mesma coisa...

 

Além de verificar os .Post, teria que ver as funções, como por exemplo IsProdPromocao se não esta mexendo na posição dos registros...

Ele não está alterando a posição dos registros, é apenas uma busca que faz na tabela para verificar se o produto está em promoção ou não.

 

function IsProdPromocao( sCodProd : String ) : Boolean;begin  Result := VarToStr( Lookup('CADPRODUTO', ['COD_PROD'], [sCodProd], 'Promocao') ) = 'S';end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas deve de ser alguma coisa que esta mudando a posição dele, você não tem nada nos eventos ? alguma coisa que mexa em posição ou algo do tipo ?

Tente ainda fazer o seguinte....

 

Antes da linha DMDados.TCadPedido2.First;

Coloque:

DMDados.TCadPedido2.DisableControls;
E depois do end;

coloque:

DMDados.TCadPedido2.EnableControls;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas deve de ser alguma coisa que esta mudando a posição dele, você não tem nada nos eventos ? alguma coisa que mexa em posição ou algo do tipo ?

Tente ainda fazer o seguinte....

 

Antes da linha DMDados.TCadPedido2.First;

Coloque:

DMDados.TCadPedido2.DisableControls;
E depois do end;

coloque:

DMDados.TCadPedido2.EnableControls;

Amigo, fiz isso mas não houve mudança nenhuma...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vixe... Faz um teste removendo o comandos de Edit, ou seja, deixando somente ele entrar e sair do loop, sem alterar nenhum dado.... quem sabe pode ser também o indice da tabela que esta fazendo isto, ou seja, quando você da o Post, ele pode executar o indice o voltar no inicio da tabela...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vixe... Faz um teste removendo o comandos de Edit, ou seja, deixando somente ele entrar e sair do loop, sem alterar nenhum dado.... quem sabe pode ser também o indice da tabela que esta fazendo isto, ou seja, quando você da o Post, ele pode executar o indice o voltar no inicio da tabela...

Já removi os Edits/Insert... mas nada dá certo...não sei mais o que fazer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remove este procedimento do OnClick do DBGrid e coloca em um botão...

FINALMENTE!!!!

Consegui... coloquei uma condição do tipo boolean (Global) no momento que a procedure onclick do dbradio é chamada, e no afterpost da tabela Tcadpedido2 verifiquei se é verdadeira, não faz nada, caso contrario, executa normalmente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.