Gravar registro de log de alterações nas tabelas

21/11/2019

7

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

Posts


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

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar