Auditoria com Clientdataset
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.
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
Curtidas 0
Respostas
Marco Salles
22/06/2011
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)
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)
GOSTEI 0
Rafael Mattos
22/06/2011
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
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
GOSTEI 0
Marco Salles
22/06/2011
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
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
GOSTEI 0
Rafael Mattos
22/06/2011
[code]
ClientDataSet2.Data:=ClientDataSet1.Delta;
clientDataSet2.SaveToFile('xmlAlterado.xml',dfXMLUTF8);
assim ele controla as alteração? os registro Excluido e Alterados?
GOSTEI 0
Marco Salles
22/06/2011
[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....
GOSTEI 0
Rafael Mattos
22/06/2011
não achei a revista mais achei o exemplo q tinha feito dela
Rotina
No Evento GetDataSetProperties vc coloca o código
e no evento UpdateData do DataSetProvider colo o código
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;
GOSTEI 0