nicolasbraz Postado Setembro 3, 2009 Denunciar Share Postado Setembro 3, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Setembro 3, 2009 Denunciar Share Postado Setembro 3, 2009 Você usa quais componentes, IBDataBase, IBQuery???, qual o banco que você usa? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 3, 2009 Denunciar Share Postado Setembro 3, 2009 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 microMas caso esteja mesmo a fim de fazer, veja este exemplohttp://imasters.uol.com.br/artigo/2718/del...rquivos_textos/abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Setembro 4, 2009 Autor Denunciar Share Postado Setembro 4, 2009 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 microMas caso esteja mesmo a fim de fazer, veja este exemplohttp://imasters.uol.com.br/artigo/2718/del...rquivos_textos/abraçoEntã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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Setembro 4, 2009 Denunciar Share Postado Setembro 4, 2009 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=7Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Setembro 4, 2009 Autor Denunciar Share Postado Setembro 4, 2009 (editado) Eu quero gravar as alterações em uma tabela.Vou testar isso. Editado Setembro 4, 2009 por nicolasbraz Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Setembro 4, 2009 Autor Denunciar Share Postado Setembro 4, 2009 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 microMas caso esteja mesmo a fim de fazer, veja este exemplohttp://imasters.uol.com.br/artigo/2718/del...rquivos_textos/abraçojhonas 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Setembro 4, 2009 Denunciar Share Postado Setembro 4, 2009 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Setembro 8, 2009 Autor Denunciar Share Postado Setembro 8, 2009 (editado) 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çosEu 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 Setembro 9, 2009 por Jhonas Regras do Forum Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Stanley - Postado Setembro 9, 2009 Denunciar Share Postado Setembro 9, 2009 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 melhorVocê 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Setembro 10, 2009 Autor Denunciar Share Postado Setembro 10, 2009 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.gifEstou 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 11, 2009 Denunciar Share Postado Setembro 11, 2009 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 tabelaabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Setembro 14, 2009 Autor Denunciar Share Postado Setembro 14, 2009 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.jpgEu tenho varias opções podendo filtrar por Funcionario, Tabela e tipo de operação. Obrigado a todos pela ajuda. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Setembro 14, 2009 Denunciar Share Postado Setembro 14, 2009 nicolasbraz, será que você poderia nos passar como você fez?, eu tambem gostaria de fazer isso....Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Setembro 14, 2009 Autor Denunciar Share Postado Setembro 14, 2009 (editado) nicolasbraz, será que você poderia nos passar como você fez?, eu tambem gostaria de fazer isso....AbraçosDouglas 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 Setembro 14, 2009 por nicolasbraz Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 14, 2009 Denunciar Share Postado Setembro 14, 2009 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 registrosexemplo: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 procedureIncluir;Alterar;Excluir;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Setembro 15, 2009 Denunciar Share Postado Setembro 15, 2009 Esse Jhonas é um Crânio :ninja: :ninja: :ninja: .... Vlw mesmo =D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
nicolasbraz
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
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.