Fórum Comparando se houve alteração #410178
04/12/2011
0
Estou tendo um probleminha com uma comparação simples (if xx.valus <> xx.oldValue then).
Tenho duas tabelas onde uma está ligada a outra por MasterSource. Estou utilizando o componente Zeos.
Quando clica no botão confirmar é feito um while not EoF no zTable da tabela filha comparando um a um os campos e caso algum tenha sido alterado entra no if e faz o que tem que fazer.
O estranho é que quando eu vou debugando (F8), faz certinho, mas quando clico no confirmar ele pega a primeira linha e compara com a segunda, sendo que ele assume o OldValue a primeira e o value a segunda linha.
O teste que fiz foi assim:
A tabela filha tem 10 registros com 4 colunas. Preenchi nos dois primeiros registros a 4ªcoluna. Confirmei. Quando altero, ativa-se a fase de verificação. Mesmo não alterando nada eu confirmo e é aí que entra na verificação confundindo a 4ª coluna do 1º registro com a 4ª coluna do 2º.
Como disse é zeos, um zTable com cachedUpdates ligado por masterSource.
Quem puder dar alguma idéia eu agradeço.
Se já tiver isso no fórum peço desculpas, pois sou membro novo e peço para que me enviem o link.
Obrigado
Vinícios Grein
Curtir tópico
+ 0Posts
05/12/2011
Flavia Santos
Não seria melhor se você fizesse uma trigger na tabela fazendo esse comparativo?
Gostei + 0
05/12/2011
Vinícios Grein
Gostei + 0
05/12/2011
Flavia Santos
Gostei + 0
05/12/2011
Cauê Nishijima
Você esta usando o Zeos sozinho ou em conjunto com o ClientDataSet, se for em conjunto ao invés de fazer comparação um por um não seria melhor usar o Delta do ClientDataSet, o Zeos eu não sei se possui isso.
Qualquer dúvida sobre como usar o Delta assista a essa video aula : https://www.devmedia.com.br/post-5717-Mini-curso-de-ClientDataSet-Parte-VIII--Data-e-Delta.html
Gostei + 0
07/12/2011
Luis Godinho
Acredito que se mudar sua condição de (if xx.values <> xx.oldvalue) para (if xx.NewValues <> xx.oldValue) deverá resolver seu problema. Caso não tenha testado desta forma, tente ai e nos diga.
Se persirtir o problema, coloque no post o trecho do seu código para analizarmos e tentar ajudar.
Abs.!
Gostei + 0
09/12/2011
Vinícios Grein
Ficou:
DataSet.First;
while not DataSet.EoF do
begin
DataSet.Locate(CODIGO,vCodigo,[]); //vCodigo é uma variável de controle
if (xx.oldValue <> xx.Value) then
//
...
DataSet.Next;
end;
O NewValue também não deu certo. Mas agradeço os posts.
Obrigado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)