Faccruz 0 Denunciar post Postado Novembro 23, 2006 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
Hugo Slepicka 0 Denunciar post Postado Novembro 23, 2006 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
marcio.theis 3 Denunciar post Postado Novembro 23, 2006 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... Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Novembro 23, 2006 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
marcio.theis 3 Denunciar post Postado Novembro 23, 2006 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
Faccruz 0 Denunciar post Postado Novembro 24, 2006 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
marcio.theis 3 Denunciar post Postado Novembro 24, 2006 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
Faccruz 0 Denunciar post Postado Novembro 24, 2006 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
marcio.theis 3 Denunciar post Postado Novembro 24, 2006 Remove este procedimento do OnClick do DBGrid e coloca em um botão... Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Novembro 24, 2006 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
marcio.theis 3 Denunciar post Postado Novembro 24, 2006 Aew... beleza... http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites