none
Histórico de registros alterados no Access RRS feed

  • Pergunta

  • Boa tarde, pessoal!

    Sou iniciante no fórum e gosto muito de Access e Excel.

    Tenho um banco de dados em Access e gostaria de criar um histórico dos campos que estão sendo alterados pelo usuário logados na máquina.

    Por exemplo:

    ----------------------------------------------------------------------------------------------------------------------

    Usuario - Data - Hora - Form alterado - Campo alterado - Valor Anterior - Valor Atual

    ----------------------------------------------------------------------------------------------------------------------

    Tem como fazer isso?

    Parabéns pelo fórum e muito obrigado! 

    segunda-feira, 20 de maio de 2013 18:32

Respostas

  • O subform é um formulário.

    para o que você pretende fazer deve utilizar os eventos dos controles e form para verificar quais as alterações para guardar na tblChanges.

    Pode usar o evento BeforeUpdate do formulário ligado à tabela, ou se quiser pode usar o evento BeforeUpdate ou AfterUpdate de cada campo que quer guardar o histórico, mas atenção que não precisa mudar de registo para os eventos do campo serem chamados, eles serão chamado cada vez que for feita alteração e o foco mude para outro campo.

    Fica util usar a propriedade OldValue dos controles para saber qual o valor antigo, antes do registo ser ser actualizado, e assim evitar que sejam criados registo de histórico  desnecessarios. Mas o evento do form para poder usar o OldValue tem de ser apenas o BeforeUpdate.

    Leia mais sobre EventosSQL e Recordset e como usá-los.

    
    quarta-feira, 22 de maio de 2013 06:56

Todas as Respostas

  • Tem como fazer sim.

    Para isso tem de dominar bem o Access bem como a programação VBA.

    E o primeiro passo é identificar bem quais os campo de que tabelas serão sujeitos a esse histórico.

    Depois e só fazer com que o utilizador só possa adicionar, remover ou alterar registos a partir de formulários, os quais terão procedimentos para quando seja efectuada uma alteração, seja criado um registo na tabela do histórico.

    Nestes casos o ideal será usar o sistema front-end / back-end, tendo a BD de back-end proteção com password. A BD front-end terá um sistema de login para os utilizadores, e deverá ser compilada para executável antes de entregue ao utilizador.

    De qualquer forma, você deve começar com algo pequeno e simples, até conseguir um exemplo prático. Aí avança para uma BD mais bem elaborada.

    segunda-feira, 20 de maio de 2013 20:24
  • Nando, boa tarde!

    Obrigado por me auxiliar. Veja o que eu fiz até agora.

    Dividi o banco de dados onde no Back-end só vão as tabelas correto? No front end, criei um form de login onde os usuários entram conforme seus respctivos nomes. Depois, quando percebi minha necessidade, criei uma tblChanges no back end com os campos: ID, FromName, ControlName, UserName, Date, Hour, OldValue, Value.

    Só que quando cheguei até aí, travei. Não consigo seguir nem danado... Como poderei prosseguir? Tenho que fazer alguma consulta, ou será mesmo em VBA? Pode me ajudar?

    Muito obrigado pela atenção!

    segunda-feira, 20 de maio de 2013 20:54
  • Agora chega a vez de criar os formulários para introdução e edição de dados.

    Nesses formulários deve haver forma de identificar quando um registo é alterado para criar um registo na tblChanges. Para isso é necessário usar VBA.

    Convém aprofundar o conhecimento de VBA para Acces.

    Um bom ebook em Inglês:  Access 2010 Programmer's Reference

    terça-feira, 21 de maio de 2013 14:19
  • Nando, tudo bem?

    Obrigado pelo retorno. Consegui fazer através de um exemplo. Funcionou para o form principal, mas o subformulário ele não registra.

    Quando na variável coloco os nomes dos campos principal tudo bem... funciona.

    Mas quando coloco os textbox do subform, ele não registra.

    coloquei assim .... ' " & Form_NomeSubform_meucontrole & " ', etc....

    Essa colocação está errada?

    terça-feira, 21 de maio de 2013 17:11
  • Esqueci de mencionar...

    Obrigado pela dica do download. Vou baixar.

    Valew!

    terça-feira, 21 de maio de 2013 17:13
  • O subform é um formulário.

    para o que você pretende fazer deve utilizar os eventos dos controles e form para verificar quais as alterações para guardar na tblChanges.

    Pode usar o evento BeforeUpdate do formulário ligado à tabela, ou se quiser pode usar o evento BeforeUpdate ou AfterUpdate de cada campo que quer guardar o histórico, mas atenção que não precisa mudar de registo para os eventos do campo serem chamados, eles serão chamado cada vez que for feita alteração e o foco mude para outro campo.

    Fica util usar a propriedade OldValue dos controles para saber qual o valor antigo, antes do registo ser ser actualizado, e assim evitar que sejam criados registo de histórico  desnecessarios. Mas o evento do form para poder usar o OldValue tem de ser apenas o BeforeUpdate.

    Leia mais sobre EventosSQL e Recordset e como usá-los.

    
    quarta-feira, 22 de maio de 2013 06:56