Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 580827
            [titulo] => Verificação OldValue e NewValue do ClienteDataSet
            [dataCadastro] => DateTime Object
                (
                    [date] => 2017-05-02 16:56:25
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 316364
            [status] => A
            [isExample] => -1
            [NomeUsuario] => Jones Granatyr
            [Login] => jonesgranatyr@gmail.com
            [Apelido] => 
            [Foto] => 316364_20160509203219.png
            [Conteudo] => Opa! Tente usar somente Value ao invés de NewValue
        )

)

Verificação OldValue e NewValue do ClienteDataSet

Messias Natal
   - 02 mai 2017

Boa Tarde pessoal estou precisando de uma ajuda, referente a OldValue e NewValue do ClienteDataSet.
Estou implementando uma função de log do meu sistema, onde utilizo o BeforeUpdateRecord do DataSetProvider para realizar o lançamento do log, só que estou com um problema quando se trata de alteração do registro (UpdateKind = ukModify), ao fazer a verificação dos campos alterados, eu só quero que lance no log somente o campo que realmente foi alterado, segue meu código:
#Código //PERCORRENDO O DATASET VERIFICANDO TODOS OS CAMPOS QUE FORAM ALTERADOS E ADD A VARIAVEL - CamposAlterados
while i <= DeltaDS.FieldCount - 1 do
begin
if ((Trim(VarToStr(DeltaDS.Fields[i].OldValue)) <> Trim(VarToStr(DeltaDS.Fields[i].NewValue)))) then
self.CamposAlterados := self.CamposAlterados + ' - '+ DeltaDS.Fields[i].DisplayLabel +' : "' + VarToStr(DeltaDS.Fields[i].OldValue) + '" PARA: "' +
VarToStr(DeltaDS.Fields[i].NewValue) +'"' + #13;
Inc(i);
end;

Só que quando eu não altero o campo, ele passa como se fosse alterado pois o meu OldValue contem os dados e o meu NewValue esta null desta forma, ele está diferente então por isso é feito o lançamento no log, alguém sabe como eu ajusto esta verificação ?

Post mais votado

Jones Granatyr
|
MVP
Pontos: 940
    02 mai 2017

Opa! Tente usar somente Value ao invés de NewValue

Messias Natal
   - 02 mai 2017

Vou tentar.

Messias Natal
   - 03 mai 2017

Não deu Certo, aconteceu a mesma coisa.

Emerson
   - 11 mai 2017

Avalie se o conteúdo é null antes de gravar o LOG.

#Códigofor i := 0 to DeltaDS.FieldCount - 1 do
if (DeltaDS.Fields[i].OldValue <> null) and (DeltaDS.Fields[i].NewValue <> null) then
if (DeltaDS.Fields[i].OldValue <> DeltaDS.Fields[i].NewValue) then
begin
self.CamposAlterados := self.CamposAlterados + ' - '+
DeltaDS.Fields[i].DisplayLabel +' : "' + VarToStr(DeltaDS.Fields[i].OldValue) +
'" PARA: "' + VarToStr(DeltaDS.Fields[i].NewValue) +'"' + #13;
end;

Emerson
   - 11 mai 2017

#Códigofor i := 0 to DeltaDS.FieldCount - 1 do
if (DeltaDS.Fields[i].OldValue <> null) and (DeltaDS.Fields[i].NewValue <> null) then
if (DeltaDS.Fields[i].OldValue <> DeltaDS.Fields[i].NewValue) then
begin
self.CamposAlterados := self.CamposAlterados + ' - '+
DeltaDS.Fields[i].DisplayLabel +' : "' + VarToStr(DeltaDS.Fields[i].OldValue) +
'" PARA: "' + VarToStr(DeltaDS.Fields[i].NewValue) +'"' + #13;
end;

Emerson
   - 11 mai 2017

#Código.for i := 0 to DeltaDS.FieldCount - 1 do
. if (DeltaDS.Fields[i].OldValue <> null) and (DeltaDS.Fields[i].NewValue <> null) then
. if (DeltaDS.Fields[i].OldValue <> DeltaDS.Fields[i].NewValue) then
. begin
. self.CamposAlterados := self.CamposAlterados + ' - '+
. DeltaDS.Fields[i].DisplayLabel +' : "' + VarToStr(DeltaDS.Fields[i].OldValue) +
. '" PARA: "' + VarToStr(DeltaDS.Fields[i].NewValue) +'"' + #13;
. end;
.

Emerson
   - 11 mai 2017

na verdade não precisa do begin...end. pode tirar.

Messias Natal
   - 19 mai 2017

Ok emerson vou tentar fazer.

Messias Natal
   - 25 mai 2017

Não deu certo continuou exibindo os dados que não atualizei veja:
- ID : "1" PARA: ""
- CELULAR : "Não Informado" PARA: ""
- TELEFONE : "Não Informado" PARA: ""
- DATA_CADASTRO : "25/05/2017" PARA: ""
- ENDERECO : "Não Informado" PARA: ""
- STATUS : "1" PARA: ""
- FOTO : "Não Informado" PARA: ""
- DATA_NASCIMENTO : "25/05/2017" PARA: ""
- ID_EMPRESA : "1" PARA: ""
- NOME : "Messias" PARA: ""
- SOBRENOME : "Antonio Natal" PARA: ""

Emerson
   - 25 mai 2017

Publique o trecho de código que você está utilizando...