Quais campos da tabela foram alterados?
Salve pessoal,
Estou aqui com mais uma duvida. Estou precisando fazer um log de alterações realizadas em um cadastro de cliente. Tipo assim tudo que é campo que o usuario alterar na tabela de CLIENTE eu fazer um log com o valor anterior a atualização ...
Exemplo: Na minha tabela de cliente tem o campo:
RAZAO - VARCHAR(60)
FANTASIA 0 VARCHAR(60)
O seguinte registro no banco:
RAZAO = ´EMPRESA DE TESTE LTDA´
FANTASIA = ´EMPRESA DE TESTE´
Dai o usuario logado no sistema vai la e muda a FANTASIA DESTE CLIENTE PARA:
FANTASIA = ´SUPER EMPRESA DE TESTE´
Entao eu queria ter esta modificação grava em um log de alterações.
IDUSUARIO = 2
DATA = 10/11/2006 15:18:00
CAMPO = FANTASIA
NOVO_VALOR = ´SUPER EMPRESA DE TESTE´
Se o usuario alterar mais de um campo ... o log listar tudo mais ou menos assim:
IDUSUARIO = 2
DATA = 10/11/2006 15:18:00
CAMPO = FANTASIA
NOVO_VALOR = ´SUPER EMPRESA DE TESTE´
CAMPO = RAZAO
NOVO_VALOR = ´SUPER EMPRESA DE TESTE LTDA´
CAMPO = ENDERECO
NOVO_VALOR = ´RUA DA EMPRESA DELE 1000´
Então é isso pessoal ... Estou usando o Delphi 7 + DbExpress + ClientDataSet + Firebird 1.5
Se alguem puder me dar um help ai .. agradeço desde já.
Abraços!!
Estou aqui com mais uma duvida. Estou precisando fazer um log de alterações realizadas em um cadastro de cliente. Tipo assim tudo que é campo que o usuario alterar na tabela de CLIENTE eu fazer um log com o valor anterior a atualização ...
Exemplo: Na minha tabela de cliente tem o campo:
RAZAO - VARCHAR(60)
FANTASIA 0 VARCHAR(60)
O seguinte registro no banco:
RAZAO = ´EMPRESA DE TESTE LTDA´
FANTASIA = ´EMPRESA DE TESTE´
Dai o usuario logado no sistema vai la e muda a FANTASIA DESTE CLIENTE PARA:
FANTASIA = ´SUPER EMPRESA DE TESTE´
Entao eu queria ter esta modificação grava em um log de alterações.
IDUSUARIO = 2
DATA = 10/11/2006 15:18:00
CAMPO = FANTASIA
NOVO_VALOR = ´SUPER EMPRESA DE TESTE´
Se o usuario alterar mais de um campo ... o log listar tudo mais ou menos assim:
IDUSUARIO = 2
DATA = 10/11/2006 15:18:00
CAMPO = FANTASIA
NOVO_VALOR = ´SUPER EMPRESA DE TESTE´
CAMPO = RAZAO
NOVO_VALOR = ´SUPER EMPRESA DE TESTE LTDA´
CAMPO = ENDERECO
NOVO_VALOR = ´RUA DA EMPRESA DELE 1000´
Então é isso pessoal ... Estou usando o Delphi 7 + DbExpress + ClientDataSet + Firebird 1.5
Se alguem puder me dar um help ai .. agradeço desde já.
Abraços!!
Mmoreira
Curtidas 0
Respostas
Saint
10/11/2006
opa..blza? pq vc nao usa array?
por exemplo..crie um array dinamico
aAntes:array of string
aih no before edit vc coloca lah
aih blza..vc tem os valores dos campos..aih no after post da query vc coloca
e pronto..vc vai ter o log do que foi alterado..
ah, o ActiveControl:=nil ali em cima é pra tirar o foco de todos os campos..pq se tratando de banco, as vezes vc pode por exemplo querer salvar enquanto um campo está sendo alterado e o objeto ainda nao atribuiu o valor visualizado ao dataset..
espero ter ajudado, abraco!
por exemplo..crie um array dinamico
aAntes:array of string
aih no before edit vc coloca lah
SetLength(aAntes,qryCliente.RecordCount); for i:=0 to qryCliente.recordcount-1 do aAntes[i]:=qryCliente.fields[i].asstring;
aih blza..vc tem os valores dos campos..aih no after post da query vc coloca
ActiveControl:=nil; for i:=0 to qrycliente.recordcount-1 do if aAntes[i]<>qrycliente.fields[i].asstring then //Grava o log aqui..o campo foi alterado.. GravaLog;
e pronto..vc vai ter o log do que foi alterado..
ah, o ActiveControl:=nil ali em cima é pra tirar o foco de todos os campos..pq se tratando de banco, as vezes vc pode por exemplo querer salvar enquanto um campo está sendo alterado e o objeto ainda nao atribuiu o valor visualizado ao dataset..
espero ter ajudado, abraco!
GOSTEI 0
Emerson Nascimento
10/11/2006
você pode ler a alteração no próprio clientdataset:
(eu recomendo que isso seja feito numa trigger)
var i: integer; begin with ClientDataSet1 do for i := 0 to FieldCount-1 do if Fields[i].NewValue <> Fields[i].OldValue then ShowMessage(´Campo ´+Fields[i].FieldName+´ alterado´); end;
(eu recomendo que isso seja feito numa trigger)
GOSTEI 0
Macario
10/11/2006
Olá boa tarde colega.
Tenho uma rotina que fiz uso o BeforeUpdateRecord do DataSetProvider, pois atraves do Delta dele consigo mapear os campos onde pego nao so o valor alterado mas sim o valor anterior.
Vou procurar um local onde possa postar a rotina para que todos possam utilizar.
Tenho uma rotina que fiz uso o BeforeUpdateRecord do DataSetProvider, pois atraves do Delta dele consigo mapear os campos onde pego nao so o valor alterado mas sim o valor anterior.
Vou procurar um local onde possa postar a rotina para que todos possam utilizar.
GOSTEI 0