Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 3034 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

 

 

Olá amigos do grupo, alguém pode me dar uma força?

Tenho um campo do tipo calculado chamado "calc_vl_total" em um tzquery(zeos) e no evento OnCalcFields eu faço:

calc_vl_total.value := query.fieldbyname('valor').value * query.fieldbyname('qtde').value; 

No formulário eu tenho 3 dbedits, sendo que estão vinculados aos campos mencionados acima.

Porém, quando eu altero o valor do campo valor ou quantidade, o campo DBEdit que está vinculado com o campo calculado(calc_vl_total) não atualiza sozinho, ou seja, é preciso que eu clique dentro do DBEDIT (que está vinculado com o campo calculado) para que o novo valor calculado seja apresentado. Eu gostaria de, assim que eu alterasse o valor da qtde ou valor, o dbedit 'total' já atualizasse com o valor total de forma automática... 

 

Este comportamento é normal ou estou deixando de fazer alguma coisa necessária?

 

Lazarus 1.4.4
Zeos 7.0.4
Windows x32

Obrigado,
Renato

 
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Criei uma aplicação exemplo sem usar o zeos.. acontece mesma coisa.. :( 

Tambem criei uma aplicação em delphi e o comportamento foi o mesmo.. ou seja.. o campo calculado só é 'atualizado' na tela quando o foco passa sobre ele.. Se alterar o campo quantidade ou valor o campo calculado até chega a ser calculado com o valor total(em memoria), mas não é atualizado o componente que está vinculado a ele na tela, ou seja.. um dbedit...

Link para o comentário
Compartilhar em outros sites

Bom dia rrricci, você tem essa aplicação de exemplo? Pois os campos calculados são sempre atualizados ao alterar qualquer field da querie, se ela descender em algum momento do TDataSet 

Dê uma olhada no propriedade AutoCalcFields se ela está marcada, pois se em algum momento ela descender de TDataSet ela irá passar no método UpdateCalcFields.

Obrigado.

Link para o comentário
Compartilhar em outros sites

Olá chará.. obrigado pela ajuda.. Anexei um projeto exemplo feito em lazarus..ele só tem uma dependência do componente TRxMemoryData que descende do TDataSet também. Usei este componente para não ter que usar o Zeos(ou similar) para fazer conexão com BD só para fins de exemplo.. Caso precise de outro exemplo com outro componente, lhe envio..

Obrigado por enquanto..

Renato

ExemploCampoCalculado.rar

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
Em 22/12/2015 at 11:12, rrricci disse:

Olá chará.. obrigado pela ajuda.. Anexei um projeto exemplo feito em lazarus..ele só tem uma dependência do componente TRxMemoryData que descende do TDataSet também. Usei este componente para não ter que usar o Zeos(ou similar) para fazer conexão com BD só para fins de exemplo.. Caso precise de outro exemplo com outro componente, lhe envio..

Obrigado por enquanto..

Renato

ExemploCampoCalculado.rar

Renato, vi seu exemplo quando tinha postado e tentei instalar a RxLibrary aqui no Lazarus (sou bem iniciante no Lazarus, rsrs) mas não consegui, por isso não cheguei a falar mais nada, mas estranho viu, vendo o fonte do RxMemoryData (http://wiki.freepascal.org/RXfpc) não notei problema :/

Link para o comentário
Compartilhar em outros sites

 Use AsCurrency para valor e AsInteger para Quantidade se for inteiro. Já tive um problema igual com clientdataset, era erro do Delphi ou do componente, reinstalei o Delphi e passou a funcionar com Value, mais quando você chama pelo método de campo definido sempre funciona tanto com um quanto para o outro, Value tive esse problema porque o mecanismo que recebia GetValue não gerava o evento OnCalcFields, aí não passava quando os componentes visuais atualizavam o Valor.

 Use AsCurrency para valor e AsInteger para Quantidade se for inteiro. Já tive um problema igual com clientdataset, era erro do Delphi ou do componente, reinstalei o Delphi e passou a funcionar com Value, mais quando você chama pelo método de campo definido sempre funciona tanto com um quanto para o outro, Value tive esse problema porque o mecanismo que recebia GetValue não gerava o evento OnCalcFields, aí não passava quando os componentes visuais atualizavam o Valor.

Link para o comentário
Compartilhar em outros sites

2 horas atrás, renato_oda disse:

Renato, vi seu exemplo quando tinha postado e tentei instalar a RxLibrary aqui no Lazarus (sou bem iniciante no Lazarus, rsrs) mas não consegui, por isso não cheguei a falar mais nada, mas estranho viu, vendo o fonte do RxMemoryData (http://wiki.freepascal.org/RXfpc) não notei problema :/

Olá Renato_Oda.. para usar o RXMemoryData, baixe o componente pelo SVN http://svn.code.sf.net/p/lazarus-ccr/svn/components/rx/trunk..

De qualquer maneira, obrigado pela atenção..

Valeu!

32 minutos atrás, xyberx disse:

Use AsCurrency para valor e AsInteger para Quantidade se for inteiro. Já tive um problema igual com clientdataset, era erro do Delphi ou do componente, reinstalei o Delphi e passou a funcionar com Value, mais quando você chama pelo método de campo definido sempre funciona tanto com um quanto para o outro, Value tive esse problema porque o mecanismo que recebia GetValue não gerava o evento OnCalcFields, aí não passava quando os componentes visuais atualizavam o Valor.

Olá xyberx, tentei substituir por asinteger e ascurrency como você sugeriu mas também não deu certo.. Fazendo uma depuração aqui, o evento oncalc é disparado sempre que quantidade ou valor é alterado.. ou seja.. o valor total está sendo atribuído no field dataset.. O que notei é que o valor total não está sendo propagado para o dbedit na tela.. a menos que você clique manualmente no campo dbedit "total", ai neste caso sim o valor é trazido para a tela.. :/

Renato

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3034 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.