Access inicio | | | | | |
Olá,
Seja Bem Vindo ao Blog.

Conecte-se ou registre-se e utilize gratuitamente este equipamento, temos exemplos referente a criação de banco de dados e desenvolvimento de softwares e programas utilizando o Microsoft Access.


Administração do Blog AccessDoProgramador.

Log de atividades, auditoria de dados nível de registros - MS Access e VBA

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

07062017

Mensagem 

Log de atividades, auditoria de dados nível de registros - MS Access e VBA




Origem:
http://www.usandoaccess.com.br/dicas/quem-incluiu-alterou-excluiu-access.asp?id=1&idlista=215#inicio

Eu adaptei o algoritmo para que me desse liberdade de escolher quais campos estarão no rol de logs de atividades e a descrição seja mais detalhada informando o nome dos campos em questão e as intervenções sofridas. Também previ o salvamento desses logs num banco externo para que nossa base de dados não inche mais rapidamente.

A função:
Código:
Public Function fncAuditorDeDados(strNomeForm As String, bytOperação As Byte, longID As Long)
'--------------------------------------------------------------------
'Argumento bytOperação : 0 - inclusão | 1 - Alteração | 2 - Exclusão
'--------------------------------------------------------------------
Dim qLog As String
Dim strSQL$
Dim controle
Dim FormAberto As Form
Dim BancoExterno As String
Set FormAberto = Forms(strNomeForm)
qLog = ""

'Conexão ao banco de dados externo
BancoExterno = "IN '' [;DATABASE=" & CurrentProject.Path & "\banco_auditoria.accdb;pwd=123]"

If bytOperação = 0 Then
For Each controle In FormAberto
  If controle.ControlType = acTextBox Or controle.ControlType = acComboBox Or controle.ControlType = acCheckBox Then
    If controle.Tag = 2 Then
       If Nz(Len(qLog)) = 0 Then
            qLog = controle.StatusBarText & " = " & Nz(controle.Value)
       Else
            qLog = qLog & "; " & controle.StatusBarText & " = " & Nz(controle.Value)
       End If
    End If
  End If
Next
If Nz(Len(qLog)) > 0 Then
strSQL = "INSERT INTO Auditoria(NomeUsuario,DataOperação,TipoOperação,MaquinaOrigem,NomeFormulario,IdRegistro,vLog) " & BancoExterno & " "
strSQL = strSQL & "VALUES('" & Environ("UserName") & "','" & Now & "','" & bytOperação
strSQL = strSQL & "','" & Environ("computername") & "','" & strNomeForm & "' ,'" & longID & "', """ & qLog & """);"
CurrentDb.Execute strSQL
End If
End If

If bytOperação = 1 Then
For Each controle In FormAberto
  If controle.ControlType = acTextBox Or controle.ControlType = acComboBox Or controle.ControlType = acCheckBox Then
     If controle.Tag = 2 Then
         If Nz(Len(qLog)) = 0 Then
              If Nz(controle.OldValue) <> Nz(controle.Value) Then
                 qLog = controle.StatusBarText & " DE: " & controle.OldValue & " PARA: " & controle.Value
              End If
         Else
              If Nz(controle.OldValue) <> Nz(controle.Value) Then
                qLog = qLog & "; " & controle.StatusBarText & " DE: " & controle.OldValue & " PARA: " & controle.Value
              End If
         End If
     End If
  End If
Next
If Nz(Len(qLog)) > 0 Then
strSQL = "INSERT INTO Auditoria(NomeUsuario,DataOperação,TipoOperação,MaquinaOrigem,NomeFormulario,IdRegistro,vLog) " & BancoExterno & " "
strSQL = strSQL & "VALUES('" & Environ("UserName") & "','" & Now & "','" & bytOperação
strSQL = strSQL & "','" & Environ("computername") & "','" & strNomeForm & "' ,'" & longID & "', """ & qLog & """);"
CurrentDb.Execute strSQL
End If
End If

If bytOperação = 2 Then
qLog = "Registro foi excluído"
strSQL = "INSERT INTO Auditoria(NomeUsuario,DataOperação,TipoOperação,MaquinaOrigem,NomeFormulario,IdRegistro,vLog) " & BancoExterno & " "
strSQL = strSQL & "VALUES('" & Environ("UserName") & "','" & Now & "','" & bytOperação
strSQL = strSQL & "','" & Environ("computername") & "','" & strNomeForm & "' ,'" & longID & "', """ & qLog & """);"
CurrentDb.Execute strSQL
End If
'Função adaptada oriunda do exemplo de Avelino Sampaio do site usandoaccess.com.br em seu artigo publicado:
'http://usandoaccess.com.br/dicas/quem-incluiu-alterou-excluiu-access.asp?id=1&idlista=215#inicio
'Objetivo: Registrar na tabela Auditoria as inclusões, alterações e exclusões realizadas nos registros do Formulário aberto.
End Function

Requisitos:
Ir nas propriedades dos campos no form:
Marca = 2 (todos os campos que estiverem marcado com 2 serão vigiados no log)
Texto da barra de status = Nome do campo. Ex. NomeCli será Nome do Cliente

Modo de uso:
No evento antes de atualizar do formulário:

If Me.NewRecord Then
       Call fncAuditorDeDados(Me.Form.Name, 0, Cod)
Else
       Call fncAuditorDeDados(Me.Form.Name, 1, Cod)
End If


No evento ao excluir do formulário:
Call fncAuditorDeDados(Me.Form.Name, 2, Cod)

Veja que o parâmetro Cod é o campo chave primária do seu form, 0 = Inclusão, 1 = Edições e 2 = Exclusões.

Veja todos os detalhes no exemplo. baixe do GoogleDrive:
https://drive.google.com/file/d/0B5Tif6T5QNv1WU9zUHZuaGw4X2M/view?usp=sharing

Insira alguns registros, edite e exclua alguns e em seguida abra o banco_auditoria (Senha: 123) e veja o log detalhando as ações realizadas sobre os registros.

Bom estudo!


avatar
Dilson
Facilitador
Facilitador

Brasil


http://www.dadosweb.com

Voltar ao Topo Ir em baixo

- Tópicos similares
Compartilhar este artigo em: BookmarksDiggRedditDel.icio.usGoogleLiveSlashdotNetscapeTechnoratiStumbleUponNewsvineFurlYahoo!Smarking

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum