Quem incluiu, alterou ou excluiu ?
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Montei um projeto bem simples, com a finalidade de se realizar uma auditoria. Pode ser que você precise saber o que os usuários andam aprontando, principalmente na fase de treinamento e implementação do projeto.
Idealizei uma tabela para armazenar diversas informações, como por exemplo, o nome do usuário, data e hora da ocorrência, nome do computador de origem e outros. Veja!
Elaborei uma função que pode ser utilizada em qualquer formulário ou relatório, visando este objetivo. Para isso, usamos basicamente, uma consulta ação de inclusão (INSERT INTO).
Public Sub fncAuditar(strNomeForm As String, bytOperação As Byte, strCampo As String) '---------------------------------------------------------------------------------------------- 'Argumento bytOperação : 0 - Inclusão | 1 - Alteração | 2 - Exclusão '----------------------------------------------------------------------------------------------- Dim strSql$
'----------------------------------------
'Estrutura da cosulta INSERT
'---------------------------------------- strSql = "INSERT INTO tblAuditoria (NomeUsuario, DataOperação, TipoOperação,"
strSql = strsql & "MaquinaOrigem, NomeFormulario, identificação) " strSql = strSql & "VALUES(""" & CreateObject("Wscript.network").UserName & """,'" & Now & "','" & bytOperação strSql = strSql & "','" & Environ("computername") & "','" & strNomeForm & "',""" & strCampo & """);"
'------------------------------------
'Executando a consulta
'------------------------------------ CurrentDb.Execute strSql End Sub
Para capturar o nome do usuário que faz as alterações, temos as seguintes situações:
a) utilizar a função CurrentUser(), caso o aplicativo tenha proteção a nível de usuário (MDW),
b) usar o nome do usuário logado no Windows. Opção empregada no aplicativo exemplo:
CreateObject("Wscript.network").UserName
ou
Environ("username")
c) usar o nome do usuário armazenado em uma tabela do aplicativo (tblUsuários). Neste caso, usamos a variável pública que contém o nome do usuário logado. O aplicativo Maestro disponível neste site, faz uso desta opção.
login.usuario
Quanto ao nome do computador, capturamos através da função Environ("ComputerName"). Você encontra maiores detalhes sobre a função Environ, neste meu artigo.
Para controlar as inclusões e as alterações de um formulário, usamos o evento Antes de atualizar do formulário.
Private Sub Form_BeforeUpdate(Cancel As Integer) If Me.NewRecord Then '------------------------ 'Auditar novo registro '------------------------ Call fncAuditar(Me.Name, 0, "Cliente " & Me!NomeCliente) Else '------------------------- 'Auditar registro alterado '------------------------- Call fncAuditar(Me.Name, 1, "Cliente " & Me!NomeCliente) End If End Sub
Para controlar a exclusão, usamos o evento Ao excluir do formulário.
Private Sub Form_Delete(Cancel As Integer) '--------------------------- 'Auditar registro excluído '--------------------------- Call fncAuditar(Me.Name, 2, "Cliente " & Me!NomeCliente) End Sub
Clique aqui e baixe o arquivo exemplo.
Abra o formulário, faça as alterações nos registros e depois verifique a tabela tblAuditoria.
Bom estudo!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Vídeo - Criando Ribbons parte 1 - Conhecendo a estrutura Xml
11 comentário(s) Avelino Sampaio 30/08/2023 04:57:08 Gilson, se a variável tem um escopo publico, vc poderá usá-la em qualquer código de qualquer módulo. Experimente: ... strSql = "INSERT INTO tblAuditoria (NomeUsuario, DataOperação, TipoOperação," strSql = strsql & "MaquinaOrigem, NomeFormulario, identificação) " strSql = strSql & "VALUES(""" & strUsuarioAtual & """,'" & Now & "','" & bytOperação strSql = strSql & "','" & Environ("computername") & "','" & strNomeForm & "',""" & strCampo & """);" ... Gilson Russo 28/08/2023 18:34:30 Boa noite! Mestre Avelino. Como faço para implementar na tblAuditoria o nome do usuario logado na aplicação. na aplicação existe um modulo controle acesso e tem uma var strUsuarioAtual onde fica gravado o nome do usuario. tentei fazer sozinho, mais nao consegui! Se puder me ajudar agradeço!! LEANDRO ARAUJO 14/06/2023 18:44:08 BOA NOITE AVELINO, Consegui colocar em meu banco de dados a auditoria, mas não grava as alterações e exclusões em um campo do tipo objeto OLE nem outro campo do tipo anexo. Como faço para resolver? Desde Já agradeço. Celso Gibelato 31/05/2023 13:01:50 Boa tarde Avelino,no formulário de clientes do Maestro,a inclusão do cliente é feita pelo frmNovoCliente,portanto na tblAuditoria,observei que grava como alteração e não como inclusão,uma vez que o frmClientes já foi alimentado,como faço para registrar a inclusão? No aguardo. Celso Gibelato 30/05/2023 18:56:44 Boa noite Avelino,repassei novamente todos os detalhes aqui da apresentação e mais o seu feedback que,chamou a atenção para a resposta da questão.Consegui,funcionou certinho.Valeu,Obrigado. Avelino Sampaio 30/05/2023 01:54:45 Celso, os dados do usuário, no Maestro, estão nas seguintes variáveis: login.id login.usuario Sucesso! Celso Gibelato 29/05/2023 21:45:00 Boa noite Avelino,usei essa função no Maestro como está o exemplo,funcionou legal,mas não cheguei num acordo em como capturar o usuário logado no aplicativo. Não consegui encontrar a sintaxe da instrução, você poderia ensinar? No aguardo obrigado Maurício Bruno 14/09/2022 11:12:46 Avelino, Boa Tarde, Você tem algum exemplo, que demonstra valor anterior e novo valor quando alteramos? Grato, Avelino Sampaio 03/02/2022 08:06:46 Gabriel, a função fncAuditar() tem que ficar em um módulo global. Assim, todos os formulários terão acesso a função. Sucesso! GabrielPN06 03/02/2022 07:40:03 Boa tarde mestre, em qual formulário e em qual evento seria inserida a primeira parte do código? Hebertti Sales 25/02/2021 09:55:37 Boa tarde ! a aplicação não está funcionando no office em ingles. você tem alguma alteração para tal ? |