Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Sistema de log


nicolasbraz

Pergunta

Gostaria de criar um formulario onde eu poderia saber pelo meio de uma consulta, quem alterou, excluiu ou incluiu novos dados.

Me dizeram para criar uma tabela com os seguintes campos.

- crie uma tabela de log onde voce deverá ter os campos:

- id (a chave primária, sequencial, poderá usar uma trigger com generator para aumenta-la)

- data (data do log)

- hora (hora do log)

- id usuario (o usuário que esta fazendo a operação)

- operacao ( no meu caso é 1 para inserção, 2 para alteração e 3 para exclusão)

- comando (guardo o comando SQL que executei)

Ate ai tudo bem só gostaria de saber como vou alimentar essa tabela via codigos ou pelo proprio banco de dados.

Se algum tiver algum exemplo disso ficaria grato.

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0
Gostaria de criar um formulario onde eu poderia saber pelo meio de uma consulta, quem alterou, excluiu ou incluiu novos dados.

Voce quer realmente isso ? Alem de duplicar o código, deixará o sistema mais lento em rede.

Existem programas chamados Keyloggers que fazem isto, ficam rodando em segundo plano registrando tudo o que é feito na máquina ... tipo auditoria do micro

Mas caso esteja mesmo a fim de fazer, veja este exemplo

http://imasters.uol.com.br/artigo/2718/del...rquivos_textos/

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Você usa quais componentes, IBDataBase, IBQuery???, qual o banco que você usa?
Uso a paleta interbase, Componete IbDataset.

Firebird.

Voce quer realmente isso ? Alem de duplicar o código, deixará o sistema mais lento em rede.

Existem programas chamados Keyloggers que fazem isto, ficam rodando em segundo plano registrando tudo o que é feito na máquina ... tipo auditoria do micro

Mas caso esteja mesmo a fim de fazer, veja este exemplo

http://imasters.uol.com.br/artigo/2718/del...rquivos_textos/

abraço

Então jhonas na empresa que eu trabalho, meu chefe acha que tem funcionario querendo atrapalhar o outro então ele pediu para eu fazer isso, existem coisas que um pode fazer e outro não mas tambem tem coisas que os dois podem fazer.

Link para o comentário
Compartilhar em outros sites

  • 0

Adicione o Componente IBSqlMonitor que está na paleta Interbase, va no seu IBDatabase, e nas opções Trace Flags, sete todas para True!

então no componente IBSqlMonitor, va nos events, OnSQL, lá insira o seguinte código:

form1 := tform1.create(application);
form.Memo1.Lines.Add(DateTimeToStr(EventTime) + ' ' + EventText);

Caso tenha mais alguma duvida veja este Link:

http://www.comandodigital.com.br/forum/index.php?showtopic=7

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Voce quer realmente isso ? Alem de duplicar o código, deixará o sistema mais lento em rede.

Existem programas chamados Keyloggers que fazem isto, ficam rodando em segundo plano registrando tudo o que é feito na máquina ... tipo auditoria do micro

Mas caso esteja mesmo a fim de fazer, veja este exemplo

http://imasters.uol.com.br/artigo/2718/del...rquivos_textos/

abraço

jhonas eu não quero tudo da maquina da pessoa, eu so quero saber quem inclui, excluiu ou alterou registros.

Queria que esses dados fossem salvos em uma tabela, para eu poder consultar os dados.

Link para o comentário
Compartilhar em outros sites

  • 0
Amigo, faz o que te disse, veja como ele tras os logs, dai se gostar, faz ele adicionar aquilo em uma tabela ao invez de um Memo.

Abraços

Eu fiz o que voce me passou, mas não deu muito certo não ele so mostra quando conecta.

3.8 Não é permitida a postagem de mensagens com a finalidade de manter o tópico no início da lista (up), nem de mensagens que não se refiram ao assunto do tópico (flood). Caso isso ocorra, as mensagens serão excluídas e os autores, advertidos.
Editado por Jhonas
Regras do Forum
Link para o comentário
Compartilhar em outros sites

  • 0

Olá nicolas,

Bom, antes de mais nada devo avisar que dar "UP" no tópico é um método contra as regras, por isso, evite ser banido :)

Bom, é como o Jhonas falou: Um Keylogger seria bem melhor

Você disse que tem coisas que um pode fazer, outro não. Se o sistema não bloqueia, o keylogger também não bloqueará

Mas se o problema é apenas saber quem incluiu ou excluiu dados, o keylogger serve perfeitamente

Link para o comentário
Compartilhar em outros sites

  • 0
Olá nicolas,

Bom, antes de mais nada devo avisar que dar "UP" no tópico é um método contra as regras, por isso, evite ser banido smile.gif

Estou acustumados com outros foram que pode ser usado o "UP" que eu acabei me esquecendo.

Você disse que tem coisas que um pode fazer, outro não. Se o sistema não bloqueia, o keylogger também não bloqueará

Eu disse que o sistema bloquia !

Eu sei como funciona um keylogger.

Link para o comentário
Compartilhar em outros sites

  • 0

nicolasbraz ... voce entendeu o exemplo que te passei ?

function GravaArquivoLogTransacao(TipoTransacao: TTipoTransacao): Integer;
const
  NomArquivo: String = "LogTransacao.txt";
var
  Path: String;
  Arquivo: TextFile;
begin
  Path := ExtractFilePath(Application.ExeName);
  if not DirectoryExists(Path) then begin
    CreateDir(Path);
  end;
  if not FileExists(Path + NomArquivo) then begin
    FileCreate(Path + NomArquivo);
  end;
  Try
    AssignFile(Arquivo, Path + NomArquivo);
    Append(Arquivo);
    Write(Arquivo, FormatFloat("000000", Transacao.TransactionID) + " / " + FormatFloat("000000", Transacao.GlobalID));
    case TipoTransacao of
      ttBeginTran: WriteLn(Arquivo, " - BeginTran: " + DateToStr(Date) + " " + TimeToStr(Time) + " por usuário: " + IntToStr(UserID));
      ttCommit: WriteLn(Arquivo, " - Commit: " + DateToStr(Date) + " " + TimeToStr(Time) + " por usuário: " + IntToStr(UserID));
      ttRollBack: WriteLn(Arquivo, " - RollBack: " + DateToStr(Date) + " " + TimeToStr(Time) + " por usuário: " + IntToStr(UserID));
    end;
    CloseFile(Arquivo);
    Result := 1;
  Except
    Result := -1;
  End;
end;

Na função acima, ilustra a geração de um log de transações de uma aplicação. 

procedure LeArquivoLogTransacao(NomeArquivo: String);
var
  strFile: TextFile;
  strLine: String;
begin
  AssignFile(strFile, NomeArquivo);
  Reset(strFile);
  Readln(strFile, strLine);
  while not Eof(strFile) do begin
    ShowMessage(strLine);
    Readln(strFile, strLine);
  end;
end;

Me dizeram para criar uma tabela com os seguintes campos.

- crie uma tabela de log onde voce deverá ter os campos:

- id (a chave primária, sequencial, poderá usar uma trigger com generator para aumenta-la)

- data (data do log)

- hora (hora do log)

- id usuario (o usuário que esta fazendo a operação)

- operacao ( no meu caso é 1 para inserção, 2 para alteração e 3 para exclusão)

- comando (guardo o comando SQL que executei)

Se algum tiver algum exemplo disso ficaria grato.

Este exemplo mostra que voce tera que montar funções em seu programa e que serão chamadas em algumas rotinas com operações com o banco de dados.... a unica diferença é que os dados estão sendo registrados em um arquivo texto, então voce tera que mudar para registrar em uma tabela

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas eu fiz assim nos botões Novo, Alterar, Excluir.

dmdados.iblog.insert;

   dmdados.IbLogLOG_DATA.Value:=date;
   dmdados.IbLogLOG_HORA.Value:=time;
   dmdados.IbLogLOG_NOMEUSUARIO.AsString:= dadosusuario.nomeusuario;
   dmdados.IbLogLOG_tabela.AsString:='saida';
   dmdados.IbLogLOG_OPERACAO.AsString:= 'incluiu';

   dmdados.IbLog.Post;

No caso aqui é o botão novo.

Não queria salvar num arquivo de texto porque fazendo isso, posso consultar.

http://img15.imageshack.us/img15/4793/65303823.jpg

Eu tenho varias opções podendo filtrar por Funcionario, Tabela e tipo de operação.

Obrigado a todos pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • 0
nicolasbraz, será que você poderia nos passar como você fez?, eu tambem gostaria de fazer isso....

Abraços

Douglas o que eu fiz foi assim.

Vamos usar como exemplo um formulario de cadastro de clientes ok ?

Podem ser realizar 3 tipos de operações.

Inclusão, Alteração, Exclusão ok ?

No botão adicionar não alterei o codigo do botao so implementei o seguinte codigo.

dmdados.iblog.insert;

     dmdados.IbLogLOG_DATA.Value:=date;
     dmdados.IbLogLOG_HORA.Value:=time;
     dmdados.IbLogLOG_NOMEUSUARIO.AsString:= dadosusuario.nomeusuario; // Aqui é uma variavel que pega o nome do funcionario logado.
     dmdados.IbLogLOG_tabela.AsString:='clientes'; //o nome da tabela 
     dmdados.IbLogLOG_OPERACAO.AsString:= 'incluiu'; // a operação realizada.

     dmdados.IbLog.Post;  

     dmdados.ibCliente.append;
     TbConsulta.TabVisible := false;
     tbCadastro.TabVisible := true;
     dmdados.ibclienteCli_datacad.value:=date;
     DBNome.SetFocus;
No botão alterar e excluir seria a mesma coisa só mudando no campo LOG_OPERACAO para "alteração" ou "exclusão". o codigo da tabela
CREATE TABLE LOG (
    LOG_ID           CODIGO NOT NULL /* CODIGO = INTEGER NOT NULL */,
    LOG_DATA         DATE,
    LOG_HORA         TIME,
    LOG_NOMEUSUARIO  NOME /* NOME = VARCHAR(50) */,
    LOG_OPERACAO     NOME /* NOME = VARCHAR(50) */,
    LOG_TABELA       NOME /* NOME = VARCHAR(50) */
);

Conseguiu entender ?

Editado por nicolasbraz
Link para o comentário
Compartilhar em outros sites

  • 0

nicolasbraz ... voce percebe o quanto esta tabela vai crescer ? pense em apenas 1 dia de uso do sistema .... ainda mais se voce levar em conta, que se estiver trabalhando em rede e com apenas 5 usuários, qual será a quantidade de registros que será acumulada na tabela.

E quanto a segurança dos dados ? no minimo voce terá que usar uma senha de acesso para esta tabela. Um usuário mais espero pode apagar parte dos registros da tabela se esta não estiver protegida. Pense em talvez usar criptografia dos dados.

A idéia é bem simples.... monte uma procedure ou uma função que será chamada durante a execução de Inclusão, Alteração, Exclusão.

Abra a tabela apenas uma vez, e durante as operações voce chama a procedure e salva os registros

exemplo:

procedure Incluir;
begin
     dmdados.iblog.insert;

     dmdados.IbLogLOG_DATA.Value:=date;
     dmdados.IbLogLOG_HORA.Value:=time;
     dmdados.IbLogLOG_NOMEUSUARIO.AsString:= dadosusuario.nomeusuario; // Aqui é uma variavel que pega o nome do funcionario logado.
     dmdados.IbLogLOG_tabela.AsString:='clientes'; //use uma variavel para atribuir o nome da tabela
     dmdados.IbLogLOG_OPERACAO.AsString:= 'incluiu'; // a operação realizada.

     dmdados.IbLog.Post;

     dmdados.ibCliente.append;
     TbConsulta.TabVisible := false;
     tbCadastro.TabVisible := true;
     dmdados.ibclienteCli_datacad.value:=date;
     DBNome.SetFocus;

end;

procedure Alterar;
begin
     dmdados.iblog.Edit;

     dmdados.IbLogLOG_DATA.Value:=date;
     dmdados.IbLogLOG_HORA.Value:=time;
     dmdados.IbLogLOG_NOMEUSUARIO.AsString:= dadosusuario.nomeusuario; // Aqui é uma variavel que pega o nome do funcionario logado.
     dmdados.IbLogLOG_tabela.AsString:='clientes'; //use uma variavel para atribuir o nome da tabela
     dmdados.IbLogLOG_OPERACAO.AsString:= 'alterou'; // a operação realizada.

     dmdados.IbLog.Post;

     dmdados.ibCliente.append;
     TbConsulta.TabVisible := false;
     tbCadastro.TabVisible := true;
     dmdados.ibclienteCli_datacad.value:=date;
     DBNome.SetFocus;
end;

procedure Excluir;
begin
     dmdados.iblog.delete;

     dmdados.IbLogLOG_DATA.Value:=date;
     dmdados.IbLogLOG_HORA.Value:=time;
     dmdados.IbLogLOG_NOMEUSUARIO.AsString:= dadosusuario.nomeusuario; // Aqui é uma variavel que pega o nome do funcionario logado.
     dmdados.IbLogLOG_tabela.AsString:='clientes'; //use uma variavel para atribuir o nome da tabela
     dmdados.IbLogLOG_OPERACAO.AsString:= 'excluiu'; // a operação realizada.

     dmdados.IbLog.Post;

     dmdados.ibCliente.append;
     TbConsulta.TabVisible := false;
     tbCadastro.TabVisible := true;
     dmdados.ibclienteCli_datacad.value:=date;
     DBNome.SetFocus;
end;

Então durante as rotinas de operações com tabelas no seu codigo voce chama a procedure

Incluir;

Alterar;

Excluir;

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...