Gravar registro de log de alterações nas tabelas

21/11/2019

0

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

Responder

Post mais votado

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).

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

21/11/2019

Antônio Neto


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
Responder

27/05/2021

Adriano Duarte

boa tarde, conseguio resolver?
Responder

27/05/2021

Chromusmaster


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

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

Aceitar