Comparando se houve alteração
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
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
Curtidas 0
Respostas
Flavia Santos
04/12/2011
Qual banco de dados você está utilizando?
Não seria melhor se você fizesse uma trigger na tabela fazendo esse comparativo?
Não seria melhor se você fizesse uma trigger na tabela fazendo esse comparativo?
GOSTEI 0
Vinícios Grein
04/12/2011
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...
GOSTEI 0
Flavia Santos
04/12/2011
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?
GOSTEI 0
Cauê Nishijima
04/12/2011
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
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
Luis Godinho
04/12/2011
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.!
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
Vinícios Grein
04/12/2011
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.
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