Gravar registro de log de alterações nas tabelas

Segurança

Log Manager

21/11/2019

Bom dia a todos!
Tenho uma rotina desenvolvida em Delphi com a ajuda aqui do Forum onde eu gravo em uma tabela os campos alterados das tabelas do sistema.
Preciso implementar essa rotina em javascript e não estou conseguindo obter os valores do campo alterado e o valor anterior (delta)
É uma rotina muito útil para acompanhamento de operação do sistema.
Obrigado!

begin
DmCliente.CdsAlteracoes.Open;

m_modificado := false;

for i := 0 to CdsAtivo.Fields.Count - 1 do
begin
V := CdsAtivo.Fields.OldValue;
V := VarType( V );

if CdsAtivo.Fields.OldValue <> CdsAtivo.Fields.NewValue then
begin
m_modificado := true;
with DmCliente.CdsAlteracoes do
begin
DmCliente.CdsAlteracoes.Append;
DmCliente.CdsAlteracoes.FieldByName('Alt_DtCadastro').AsString := dateToStr( Date );
DmCliente.CdsAlteracoes.FieldByName('Alt_Horario').AsString := TimeToStr( time() );
DmCliente.CdsAlteracoes.FieldByName('Alt_NomeTabela').AsString := UpperCase(NomeTabela);
DmCliente.CdsAlteracoes.FieldByName('Alt_CampoChave').AsInteger := CdsAtivo.Fields[0].OldValue;
DmCliente.CdsAlteracoes.FieldByName('Alt_NomeCampo').AsString := CdsAtivo.Fields.FieldName;

Case CdsAtivo.Fields.DataType of // .FieldByName(Vle.Cells[ 0 , i ]).DataType of
ftString:
begin
if CdsAtivo.Fields.OldValue <> Null then
DmCliente.CdsAlteracoes.FieldByName('Alt_DadoOriginal').AsString := CdsAtivo.Fields.OldValue;
if CdsAtivo.Fields.NewValue <> Null then
DmCliente.CdsAlteracoes.FieldByName('Alt_DadoAlterado').AsString := CdsAtivo.Fields.NewValue;
end;
end;

DmCliente.CdsAlteracoes.FieldByName('Alt_NomeUsuario').AsString := m_nomeusuario;
DmCliente.CdsAlteracoes.FieldByName('Alt_DtCadastro').AsDateTime := date();
DmCliente.CdsAlteracoes.FieldByName('Alt_Horario').AsString := TimeToStr(time());
DmCliente.CdsAlteracoes.FieldByName('Alt_NomeMicro').AsString := m_HostNome^.h_name;
DmCliente.CdsAlteracoes.FieldByName('Alt_IpMicro').AsString := m_HostIp;
DmCliente.CdsAlteracoes.FieldByName('Usu_Codigo').AsInteger := m_CodigoUsuario;

DmCliente.CdsAlteracoes.Post;
end;
end;
end;

if m_modificado = true then
DmCliente.CdsAlteracoes.ApplyUpdates(0);

DmCliente.CdsAlteracoes.Close;

end;
Antônio Neto

Antônio Neto

Curtidas 1

Melhor post

Emerson Nascimento

Emerson Nascimento

21/11/2019


faça isso diretamente no banco de dados, através de triggers (gatilhos).
assim você fica com um log independente da linguagem do teu sistema.

alías, se possível, coloque as regras de negócio no banco de dados, atrevés de stored procedures, functions, triggers, etc.
deste modo o seu sistema fica enxuto, as manutenções ficam mais simples e, geralmente, sem necessidade de paradas para atualização (se as mudanças forem somente nas regras de negócio).
GOSTEI 2

Mais Respostas

Antônio Neto

Antônio Neto

21/11/2019


faça isso diretamente no banco de dados, através de triggers (gatilhos).
assim você fica com um log independente da linguagem do teu sistema.

alías, se possível, coloque as regras de negócio no banco de dados, atrevés de stored procedures, functions, triggers, etc.
deste modo o seu sistema fica enxuto, as manutenções ficam mais simples e, geralmente, sem necessidade de paradas para atualização (se as mudanças forem somente nas regras de negócio).


Boas Emerson Nascimento, obrigado pelo orientação.
Essa implementação fica show de bola mesmo.
Não sou expert em bancos de dados muito menos em triggers e store procedures, mas se você tiver um mínimo para me orientar (valores old e new) acredito que eu consiga avançar.
Att.
Neto
GOSTEI 0
Adriano Duarte

Adriano Duarte

21/11/2019

boa tarde, conseguio resolver?
GOSTEI 0
Chromusmaster

Chromusmaster

21/11/2019


faça isso diretamente no banco de dados, através de triggers (gatilhos).
assim você fica com um log independente da linguagem do teu sistema.



Muito cuidado ao criar essas triggers. Precisa ser algo bem elaborado senão vai gerar gargalos imensos no seu banco de dados.

Se for fazer via trigger pegue somente campos que nunca podem sofrer alterações críticas.
GOSTEI 0
POSTAR