Fórum Comparando se houve alteração #410178

04/12/2011

0

Boa noite.
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

Vinícios Grein

Responder

Posts

05/12/2011

Flavia Santos

Qual banco de dados você está utilizando?
Não seria melhor se você fizesse uma trigger na tabela fazendo esse comparativo?
Responder

Gostei + 0

05/12/2011

Vinícios Grein

Eu estou utilizando MySql 5. Por banco não posso fazer porque aqui na empresa não é utilizado nada em banco. Tudo no delphi mesmo...
Responder

Gostei + 0

05/12/2011

Flavia Santos

Como é o código que você está utilizando para fazer essa comparação? Na sua comparação você está levando em conta o id do registro?
Responder

Gostei + 0

05/12/2011

Cauê Nishijima

Olá Vinícios Grein
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
Responder

Gostei + 0

07/12/2011

Luis Godinho

Olá!

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.!
Responder

Gostei + 0

09/12/2011

Vinícios Grein

Olá. Consegui resolver meu problema fazendo um xunxo. Coloquei um locate antes de fazer a comparação.
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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar