MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    [Resolvido]Auditor ou Log

    avatar
    jpaulorh
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 62
    Registrado : 04/02/2010

    [Resolvido]Auditor ou Log Empty [Resolvido]Auditor ou Log

    Mensagem  jpaulorh 2/8/2016, 20:53

    Amigos boa tarde!

    Um tempo atrás encontrei um exemplo de um auditor que funciona tipo um log, onde fica salvo as alterações ocorridas, e adaptei a minha situação para ficar sabendo quais alterações e quem as fez.
    Observando a funcionalidade encontrei um erro nos casos em o campo era diferente de nulo, ou seja preenchido e na situação atual passou a ser nulo (é apagado o conteúdo) não registra na tabela que audita.
    Alguém poderia dá uma luz.

    Segue o código:

    Código:
    Function WriteAudit(frm As Form, lngID As Long, resp As Long, Tabela As String)
    On Error GoTo err_WriteAudit

        Dim ctlC As control
        
        Dim db As Database
        Dim RST As Recordset
        
        Set db = CurrentDb
        Set RST = db.OpenRecordset("tblAudit")
                
        For Each ctlC In frm.Controls
            If (TypeOf ctlC Is TextBox) Or (TypeOf ctlC Is ComboBox) Then    'If TypeOf ctlC Is TextBox Then
                If ctlC.Value <> ctlC.OldValue Or IsNull(ctlC.OldValue) Then
                    If Not IsNull(ctlC.Value) Then
                        RST.AddNew
                        RST("ID") = lngID
                        RST("Responsavel") = resp
                        RST("CampoModificado") = ctlC.Name
                        RST("CampoOriginal") = ctlC.OldValue
                        RST("CampoAlterado") = ctlC.Value
                        RST("Tabela") = Tabela
                        RST("User") = GetUserName_TSB()
                        RST("PC") = fOSMachineName()
                        'rst("IP") = DameIpMaquina()
                        RST("DataModif") = Now
                        RST.Update
                    End If
                End If
            End If
        Next ctlC
        
        
    exit_WriteAudit:
        RST.Close
        db.Close
        Set RST = Nothing
        Set db = Nothing
        Exit Function
        
    err_WriteAudit:
        MsgBox Str(Err)
        MsgBox Err.Description
        Resume exit_WriteAudit
        
    End Function

    Os créditos são de:

    Candace Tripp
    ctripp1@earthlink.net
    http://www.candace-tripp.com/
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8496
    Registrado : 05/11/2009

    [Resolvido]Auditor ou Log Empty Re: [Resolvido]Auditor ou Log

    Mensagem  Alexandre Neves 7/8/2016, 14:07

    Boa tarde
    Tente
    Código:
    Function WriteAudit(frm As Form, lngID As Long, resp As Long, Tabela As String)
        On Error GoTo err_WriteAudit
        'créditos a Candace Tripp
        Dim ctlC As Control
       
        Dim db As Database
        Dim RST As dao.Recordset
       
        Set db = CurrentDb
        Set RST = db.OpenRecordset("tblAudit")
               
        For Each ctlC In frm.Controls
            If (TypeOf ctlC Is TextBox) Or (TypeOf ctlC Is ComboBox) Then    'If TypeOf ctlC Is TextBox Then
                If ctlC.value <> ctlC.OldValue Or IsNull(ctlC.OldValue) Then
                        RST.AddNew
                        RST("ID") = lngID
                        RST("Responsavel") = resp
                        RST("CampoModificado") = ctlC.Name
                        RST("CampoOriginal") = ctlC.OldValue
                        RST("CampoAlterado") = ctlC.value
                        RST("Tabela") = Tabela
                        'RST("User") = GetUserName_TSB()
                        RST("User") = NomeUtilizador
                        RST("PC") = fOSMachineName()
                        'rst("IP") = DameIpMaquina()
                        RST("DataModif") = Now
                        RST.Update
                End If
            End If
        Next ctlC
       
       
    exit_WriteAudit:
        RST.Close
        db.Close
        Set RST = Nothing
        Set db = Nothing
        Exit Function
       
    err_WriteAudit:
        MsgBox str(err)
        MsgBox err.Description
        Resume exit_WriteAudit
       
    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    jpaulorh
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 62
    Registrado : 04/02/2010

    [Resolvido]Auditor ou Log Empty Re: [Resolvido]Auditor ou Log

    Mensagem  jpaulorh 8/8/2016, 15:29

    Caro Alexandre Neves, infelizmente não resolveu mas fui quebrando cabeça e deu certo dessa forma:
    Código:
    Function WriteAudit(frm As Form, lngID As Long, resp As Long, Tabela As String)
        On Error GoTo err_WriteAudit
        'créditos a Candace Tripp
        Dim ctlC As control
        
        Dim db As Database
        Dim RST As dao.Recordset
        
        Set db = CurrentDb
        Set RST = db.OpenRecordset("tblAudit")
                
        For Each ctlC In frm.Controls
            If (TypeOf ctlC Is TextBox) Or (TypeOf ctlC Is ComboBox) Then    'If TypeOf ctlC Is TextBox Then
                If (IsNull(ctlC.Value) And Not IsNull(ctlC.OldValue)) Or (IsNull(ctlC.OldValue) And Not IsNull(ctlC.Value)) Or _
                    (Not IsNull(ctlC.Value) And Not IsNull(ctlC.OldValue) And ctlC.Value <> ctlC.OldValue) Then
                        RST.AddNew
                        RST("ID") = lngID
                        RST("Responsavel") = resp
                        RST("CampoModificado") = ctlC.Name
                        RST("CampoOriginal") = ctlC.OldValue
                        RST("CampoAlterado") = ctlC.Value
                        RST("Tabela") = Tabela
                        RST("User") = GetUserName_TSB()
                        'RST("User") = NomeUtilizador
                        RST("PC") = fOSMachineName()
                        'rst("IP") = DameIpMaquina()
                        RST("DataModif") = Now
                        RST.Update
                End If
            End If
        Next ctlC
        
        
    exit_WriteAudit:
        RST.Close
        db.Close
        Set RST = Nothing
        Set db = Nothing
        Exit Function
        
    err_WriteAudit:
        MsgBox Str(Err)
        MsgBox Err.Description
        Resume exit_WriteAudit
        
    End Function

    Dessa forma atende todas as codições:
    Se o campo antigo for nulo e o atual informado ele grava,
    Se o campo antigo não for nulo e o atual informado for anulado ele grava, ou seja está gravando qualquer situação que aconteça.
    Agradeço demais pela ajuda.

    Conteúdo patrocinado


    [Resolvido]Auditor ou Log Empty Re: [Resolvido]Auditor ou Log

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 8/11/2024, 03:23