Verificação OldValue e NewValue do ClienteDataSet
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:
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 ?
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:
//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 ?
Messias Natal
Curtidas 0
Melhor post
Jones Granatyr
02/05/2017
Opa! Tente usar somente Value ao invés de NewValue
GOSTEI 2
Mais Respostas
Messias Natal
02/05/2017
Vou tentar.
GOSTEI 0
Messias Natal
02/05/2017
Não deu Certo, aconteceu a mesma coisa.
GOSTEI 0
Emerson Nascimento
02/05/2017
Avalie se o conteúdo é null antes de gravar o LOG.
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;
GOSTEI 0
Emerson Nascimento
02/05/2017
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;
GOSTEI 0
Emerson Nascimento
02/05/2017
.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; .
GOSTEI 1
Emerson Nascimento
02/05/2017
na verdade não precisa do begin...end. pode tirar.
GOSTEI 0
Messias Natal
02/05/2017
Ok emerson vou tentar fazer.
GOSTEI 0
Messias Natal
02/05/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: ""
- 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: ""
GOSTEI 0
Emerson Nascimento
02/05/2017
Publique o trecho de código que você está utilizando...
GOSTEI 0
Messias Natal
02/05/2017
Segue o Código:
try
if UpdateKind = ukInsert then
begin
self.i := 0;
self.CamposAlterados := 'INSERÇÃO DO REGISTRO' + #13;
// PERCORRENDO TODOS OS CAMPOS PARA GRAVAÇÃO NO LOG
while i <= DeltaDS.FieldCount - 1 do
begin
self.CamposAlterados := self.CamposAlterados + ' - '+ DeltaDS.Fields[i].DisplayLabel + ' : "' + VarToStr(DeltaDS.Fields[i].OldValue)+ '"' + #13;
Inc(i);
end;
TLog.Inserir('CLIENTE', TLog.getTipoLogINSERCAO, self.CamposAlterados );
end;
if UpdateKind = ukDelete then
begin
self.i := 0;
self.CamposAlterados := 'EXCLUSÃO DO REGISTRO' + #13;
// PERCORRENDO TODOS OS CAMPOS PARA GRAVAÇÃO NO LOG
while i <= DeltaDS.FieldCount - 1 do
begin
self.CamposAlterados := self.CamposAlterados + ' - '+ DeltaDS.Fields[i].DisplayLabel + ' : "' + VarToStr(DeltaDS.Fields[i].OldValue)+'"' + #13;
Inc(i);
end;
TLog.Inserir('CLIENTE', TLog.getTipoLogEXCLUSAO, self.CamposAlterados );
end;
finally
self.CamposAlterados := '';
self.ComplementoCampo := '';
end;
try
if UpdateKind = ukInsert then
begin
self.i := 0;
self.CamposAlterados := 'INSERÇÃO DO REGISTRO' + #13;
// PERCORRENDO TODOS OS CAMPOS PARA GRAVAÇÃO NO LOG
while i <= DeltaDS.FieldCount - 1 do
begin
self.CamposAlterados := self.CamposAlterados + ' - '+ DeltaDS.Fields[i].DisplayLabel + ' : "' + VarToStr(DeltaDS.Fields[i].OldValue)+ '"' + #13;
Inc(i);
end;
TLog.Inserir('CLIENTE', TLog.getTipoLogINSERCAO, self.CamposAlterados );
end;
if UpdateKind = ukDelete then
begin
self.i := 0;
self.CamposAlterados := 'EXCLUSÃO DO REGISTRO' + #13;
// PERCORRENDO TODOS OS CAMPOS PARA GRAVAÇÃO NO LOG
while i <= DeltaDS.FieldCount - 1 do
begin
self.CamposAlterados := self.CamposAlterados + ' - '+ DeltaDS.Fields[i].DisplayLabel + ' : "' + VarToStr(DeltaDS.Fields[i].OldValue)+'"' + #13;
Inc(i);
end;
TLog.Inserir('CLIENTE', TLog.getTipoLogEXCLUSAO, self.CamposAlterados );
end;
finally
self.CamposAlterados := '';
self.ComplementoCampo := '';
end;
GOSTEI 0