bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Auditoria de Alterações em Formulários

Auditoria de Alterações em Formulários

Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 2x no Cartão de Crédito. 

Veja como comprar e saiba mais sobre o material oferecido,  clicando aqui.

Open v3

 

Usuário Eduardo:

Caro Avelino, ante a função abaixo criada por você, pergunto: onde posso alterar para conseguir capturar (gravar na tabela) o nome do campo alterado/atualizado? Na função pega um campo específico.

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$
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 & """);"
CurrentDb.Execute strSql
End Sub

Grato desde já.

Suporte:

Eduardo, seguem as modificações no projeto para atender a sua necessidade.

Para saber se um campo foi alterado, usei a propriedade OldValue que armazena o valor anterior a alteração.   Assim, comparamos o valor atual com o valor anterior e descobrimos se houve alteração.

Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strLista$
If Me.NewRecord Then
    '------------------------
    'Auditar novo registro
    '------------------------
    Call fncAuditar(Me.Name, 0, "Cliente " & Me!NomeCliente)
Else
    '-------------------------
    'Auditar registro alterado
    '-------------------------
    If Me!NomeCliente <> Me!NomeCliente.OldValue Then strLista = strLista & "/NomeCliente"
    If Me!DataNascimento <> Me!DataNascimento.OldValue Then strLista = strLista & "/DataNascimento"
    If Me!Celular <> Me!Celular.OldValue Then strLista = strLista & "/Celular"
    If Me![e-mail] <> Me![e-mail].OldValue Then strLista = strLista & "/e-mail"
    Call fncAuditar(Me.Name, 1, "Cliente " & Me!NomeCliente, strLista)
End If
End Sub

Usuário Eduardo:

Caro Avelino, funcionou perfeitamente a alteração.

Agradeço mais uma vez a boa vontade e a sua prontidão, além, claro, da disseminação de seus conhecimentos.

Download

 


 

 


4 comentário(s)

Dirceu Albrecht   01/02/2020 19:58:30

Avelino, boa noite!

A função é formidável, já me tirou de muitas encrencas, quando o usuario me liga dizendo que o sistema esta maluco... hahaha

Conforme comentário acima, eu implementei com uma passagem por todos os controles, limitando a alguns tipos de controles para não dar erro.
Porém mesmo assim alguns sempre retornam erro: 109: ValorIcms AuditoriaForm: 13: Tipos incompatíveis

Este campo é um TextBox e o tipo de dados é Moeda.

For Each ctrl In strForm.Controls
If ctrl.Name <> "dtStamp" Then
audMsg = ctrl.ControlType & ": " & ctrl.Name
Select Case ctrl.ControlType
Case acTextBox, acComboBox, acCheckBox, acListBox, acOptionGroup ' adjust to taste

If Nzx(ctrl) <> Nzx(ctrl.OldValue) Then
strChanges = strChanges & ctrl.Name & ": De " & CStr(Nzx(ctrl.OldValue, "")) & " -> " & CStr(Nzx(ctrl, "")) & vbCrLf & " | "
End If

Case Else
End Select
End If
Next ctrl

Devo estar falhando em algum detalhe mas não consegui identificar

Sidney   17/05/2018 07:06:42

Avelino, Bom dia!!
Belíssimo projeto, esse sistema é perfeito para auditar informações que foram alteradas no banco de dados, dessa forma saberemos quem foi o responsável pela tal alteração do banco, estou tentando implementar no meu projeto, estou querendo incluir mais dois campos na tabela de auditoria, e não estou conseguindo, os campos são "IF" e "Usuario_do_Sistema", este último é capturado pela função "getUsuarioAtual()". podem me ajudar?

MARCIO MELO - RJ   27/03/2018 05:02:17

Perfeito! Tipo de função que não pode faltar num banco de dados, onde várias pessoas usam para adicionar, editar e excluir. E muita das vezes ninguém sabe o que aconteceu, provocando um desgaste.

O mais bacana é que sempre que possível o Avelino disponibiliza exemplo da aplicação do código que torna uma forma prática de colocar em prática e fazer testes, trazendo uma abordagem didática e detalhada sobre o assunto.

Aprendi muito ao longo dos anos, e sugiro para os que estão iniciando, adiquir o kit completo para ter acesso online e off line a todo material, sei o quanto foi e é útil ter em mãos.

Obrigado por colaborar com os frutos do Suporte de forma super profissional.

Sou mais Brasil!

Forte abraço!

Dirceu Albrecht   26/03/2018 06:52:25

Muito boa esta função,

Como sugestão eu acredito que dê para fazer um loop pelos campos ao invés de relacionar um a um? teria como?

Saudações e parabéns pelo Blog Avelino, muito interessante esta abordagem de ficar resolvendo situações pontuais, já fiquei viciado em vir aqui conferir as novidades.

Muito bom mesmo!
Abraço


Envie seu comentário: