Verificação OldValue e NewValue do ClienteDataSet

02/05/2017

0

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:

    //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

Messias Natal

Responder

Post mais votado

02/05/2017

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

Jones Granatyr

Jones Granatyr
Responder

Mais Posts

02/05/2017

Messias Natal

Vou tentar.
Responder

03/05/2017

Messias Natal

Não deu Certo, aconteceu a mesma coisa.
Responder

11/05/2017

Emerson Nascimento

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;
Responder

11/05/2017

Emerson Nascimento

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;
Responder

11/05/2017

Emerson Nascimento

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

11/05/2017

Emerson Nascimento

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

19/05/2017

Messias Natal

Ok emerson vou tentar fazer.
Responder

25/05/2017

Messias Natal

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: ""
Responder

25/05/2017

Emerson Nascimento

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

10/02/2018

Messias Natal

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;
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar