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;
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
Curtir tópico
+ 1
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
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
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
Clique aqui para fazer login e interagir na Comunidade :)