Fórum Auditoria com Clientdataset #403562

22/06/2011

0

Olá!

Como seria o sql para cadastrar em uma tabela AUDITORIA todas as alterações realizadas nos registros de outras tabelas do banco, quando dado um ApplyUpdate().

Estou usando Delphi 2010, Firebird 2.1, dbExpress com Clientdataset.
Francisco Macedo

Francisco Macedo

Responder

Posts

22/06/2011

Marco Salles

Qaundo vc da um applayUpdates vc so ira atualizar o pacote trafegado pelo datasetProvider. Se Dois ou mais clientDaset utilizam o NestedDataSet ele compartilham do mesmo DataSetProvider . Caso contrário o Applayupdate
de cada clientdataSet que ser aatualizado ()

Porém vc pode da vários Applayupdates dentro de uma unica transação e desfazer todos os Applayupdares de
algo não sair da maneira que vc deseja

Se Tiver utilizando Insert/Delet/Updad em várias tabelas , também podera utilizar dentro de uma ùnica Transação,utilizando a nova classe TDBXTransaction do Delphi ( Versoes mais novas ,a partir do Delphi 2007)
Responder

Gostei + 0

24/06/2011

Rafael Mattos

http://www.activedelphi.com.br/forum/viewtopic.php?p=284485&sid=8bbd62276f929f7914d4ced318b74861


tem uma revista sobre isso só não sei qual edição, que tem a função que Gera em XML o que foi alterado incluido e excluido



--------------------------------------------------------------------------------
Blog: http://mundodoprogramador.wordpress.com/
MSN: rafmattos@hotmail.com
Twitter: _rafmattos
Responder

Gostei + 0

24/06/2011

Marco Salles

http://www.activedelphi.com.br/forum/viewtopic.php?p=284485&sid=8bbd62276f929f7914d4ced318b74861


tem uma revista sobre isso só não sei qual edição, que tem a função que Gera em XML o que foi alterado incluido e excluido



entendi a questão de outro modo ( me parece que entendi do modo Errado )...

Mas de qualquer forma o Xml das alteraçoes não precisa de função , dá para acess-lo de modo direto .

Acho que é assim teria que olhar nos meus Bizus ..


ClientDataSet2.Data:=ClientDataSet1.Delta;
clientDataSet2.SaveToFile('xmlAlterado.xml',dfXMLUTF8);


se colocar um datasorce  e um dbgrid ligado ao clientdataset2 da para ver as alterações
Responder

Gostei + 0

24/06/2011

Rafael Mattos


[code]
ClientDataSet2.Data:=ClientDataSet1.Delta;
clientDataSet2.SaveToFile('xmlAlterado.xml',dfXMLUTF8);


assim ele controla as alteração? os registro Excluido e Alterados?
Responder

Gostei + 0

24/06/2011

Marco Salles


[code]
ClientDataSet2.Data:=ClientDataSet1.Delta;
clientDataSet2.SaveToFile('xmlAlterado.xml',dfXMLUTF8);


assim ele controla as alteração? os registro Excluido e Alterados?



Tem que olhar nos meus bizuz ... Minhas anotações .. Mas quase que certeza que controla todos.

Sobre a matéria da revista que voce comentou eu tb li a matéria ... Tenho que procura-la a edição
"Maledita" fauta de tiempo....
Responder

Gostei + 0

24/06/2011

Rafael Mattos

não achei a revista mais achei o exemplo q tinha feito dela


Rotina

Procedure CreateLog(DataSet : TCustomClientDataSet);
var
  S : String;
begin
    // Usar o Log do Usuário
         if not(DirectoryExists(DirLog)) then
            CreateDir(DirLog);
         with DataSet do
         begin
           SetOptionalParam('DATA',Date,True);
           SetOptionalParam('HORA',Time,True);
           SaveToFile(       DirLog +Format(
            ' %s,%s,%s,%s,log.xml',[
           GetOptionalParam('USUARIO'),
           GetOptionalParam('TABELA'),
           FormatDateTime('ddmmyyyy',Date),
           FormatDateTime('hhnnss',Time)]));
         end;
end;



No Evento GetDataSetProperties vc coloca o código
procedure TDMCliente.dspClienteGetDataSetProperties(Sender: TObject;
  DataSet: TDataSet; out Properties: OleVariant);
begin
  Properties := VarArrayCreate([0,3], varVariant);
  Properties[0] := VarArrayOf(['USUARIO',NomeUsuario,True]);
  Properties[1] := VarArrayOf(['TABELA',
    IProviderSupport(DataSet).PSGetTableName,True]);
  Properties[2] := VarArrayOf(['DATA',Date,True]);
  Properties[3] := VarArrayOf(['HORA',Time,True]);
end;





e no evento UpdateData do DataSetProvider colo o código

procedure TDMCliente.dspClienteUpdateData(Sender: TObject;
  DataSet: TCustomClientDataSet);
begin
   CreateLog(DataSet);
end;

Responder

Gostei + 0

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

Aceitar