MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Log - Registros das Interações nos Formulários

    Compartilhe
    avatar
    Marceff@bol.com.br
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 40
    Registrado : 26/04/2011

    Log - Registros das Interações nos Formulários

    Mensagem  Marceff@bol.com.br em 30/7/2018, 02:06

    Boa Noite!!!

    Estou aprendendo Access e ainda preciso estudar muito pra chegar ao nível dos membros deste fórum, mas gostaria de compartilhar as dicas que aprendi mostrando que o Access é uma ferramenta infinita quanto as possibilidades, faço programação como passatempo, pois gosto muito do sistema, mas com muitas dicas valiosas aqui do fórum consegui desenvolver bancos autômatos de grande ajuda para o meu dia-a-dia no trabalho, entre tantas dicas estava buscando um meio de registrar alguns dos processos realizados em meus formulários, encontrei excelentes exemplos, aqui e também em outros sites para o que eu pretendia.

    Não lembro onde aqui no fórum, mas li uma frase que me chamou a atenção, era mais ou menos que com o Access se pode fazer qualquer coisa, bem, até agora tudo que eu pensei em fazer com Access consegui, realmente é uma plataforma amigável e de fácil compreensão.

    Portanto deixo aqui minha experiência com o que eu pretendia com o log no Access, sei que preciso melhorar o código e certamente tem alguma forma mais fácil de faze-lo do que da forma como eu fiz, de toda forma gostaria de compartilhar para que aos iniciantes como eu possam ver o guanto essa ferramenta nos aprimora, pois antes de começar com este projeto na primeira versão eu não tinha nehum conhecimento sobre as possibilidades do Access.

    Este código é parte integrante de uma ferramenta que estou ainda desenvolvendo chamada CEOS - Controle de Equipamentos e Ordem de Serviço, estou na versão 4 onde um dia pensei "será que dá pra registrar algumas das interações dos formulários em um arquivo de texto externo, ou seja, um log das ações executadas dentro do aplicativo" e como eu já imaginava, não é que tem.

    A idéia é que seja criado uma pasta do ano atual, várias pastas conforme o mês atual daquele respectivo ano e dentro da pasta do mês atual salvar os logs em vários arquivos de texto separados por dia.  

    A) Como fica o Log dentro do arquivo de texto

    ***************************************************
    01 - 26/7/2018 - 11:37:19 | Inicializando o sistema.
    ***************************************************
    02 - 26/7/2018 - 11:37:19 | Efetuando as verificações necessárias.
    03 - 26/7/2018 - 11:37:25 | Login de acesso requerido.
    04 - 26/7/2018 - 11:37:31 | Acesso ao sistema autorizado.
    05 - 26/7/2018 - 11:37:31 | O usuário Administrador acessou o sistema com sucesso.
    06 - 26/7/2018 - 11:37:38 | Acesso ao menu principal.
    07 - 26/7/2018 - 11:37:42 | Acesso ao menu cadastro.
    08 - 26/7/2018 - 11:37:44 | Acesso ao cadastro de ocorrências.
    09 - 26/7/2018 - 11:37:59 | O registro 5607 do cadastro de ocorrências está sendo criado.
    10 - 26/7/2018 - 11:40:22 | O registro de ocorrência Nº 5607 foi adicionado suas informações de ocorrência e solução.
    11 - 26/7/2018 - 11:40:25 | Salvou o registro 5607 do cadastro de ocorrências.
    12 - 26/7/2018 - 11:40:38 | O registro 5608 do cadastro de ocorrências está sendo criado.
    13 - 26/7/2018 - 11:41:22 | Salvou o registro 5608 do cadastro de ocorrências.
    14 - 26/7/2018 - 11:41:29 | O registro 5609 do cadastro de ocorrências está sendo criado.
    15 - 26/7/2018 - 11:42:27 | Salvou o registro 5609 do cadastro de ocorrências.
    16 - 26/7/2018 - 11:42:43 | O registro 5610 do cadastro de ocorrências está sendo criado.
    17 - 26/7/2018 - 11:43:30 | Salvou o registro 5610 do cadastro de ocorrências.
    18 - 26/7/2018 - 11:43:43 | O registro 5611 do cadastro de ocorrências está sendo criado.
    19 - 26/7/2018 - 11:45:47 | O registro de ocorrência Nº 5611 foi adicionado suas informações de ocorrência e solução.
    20 - 26/7/2018 - 11:45:51 | Salvou o registro 5611 do cadastro de ocorrências.
    21 - 26/7/2018 - 11:46:04 | O registro 5612 do cadastro de ocorrências está sendo criado.
    22 - 26/7/2018 - 11:46:53 | Salvou o registro 5612 do cadastro de ocorrências.
    23 - 26/7/2018 - 11:47:01 | O registro 5612 do cadastro de ocorrências foi atualizado.
    24 - 26/7/2018 - 11:47:07 | Salvou o registro 5612 do cadastro de ocorrências.
    25 - 26/7/2018 - 11:47:16 | Encerrou o cadastro de ocorrências.
    26 - 26/7/2018 - 11:47:16 | Acesso ao menu cadastro.
    27 - 26/7/2018 - 11:47:31 | Acesso automático ao menu principal devido usuário não ter selecionado nenhum submenu
    28 - 26/7/2018 - 11:47:34 | Sistema sendo encerrado, produzindo cópia de segurança...
    29 - 26/7/2018 - 11:47:38 | Cópia de segurança concluída com sucesso.
    30 - 26/7/2018 - 11:47:38 | Sistema Finalizado.
    .
    .
    .

    ***************************************************
    31 - 26/7/2018 - 12:44:37 | Inicializando o sistema.
    ***************************************************
    32 - 26/7/2018 - 12:44:37 | Efetuando as verificações necessárias.
    33 - 26/7/2018 - 12:44:42 | Login de acesso requerido.
    34 - 26/7/2018 - 12:44:43 | O usuário  desistiu do login.
    35 - 26/7/2018 - 12:44:43 | Sistema Finalizado.
    .
    .
    .

    Obs.:
    01 a 05 = Inicialização, login e autenticação;
    06 a 08 = Navegação entre os menus e submenus até o formulário a ser utilizado;
    09 a 24 = As interações realizadas no formulário utilizado;
    25 a 27 = Navegação inversa do formulário utilizado até o menu principal;
    28 a 30 = Encerramento do sistema;
    Após a finalização do sistema implementei um ponto por linha em no máximo três linhas, para caso houver uma nova inicialização do sitema no mesmo dia, possa as informações ficarem separadas a fim de melhorar a leitura no arquivo.
    31 a 35 = Exemplificando como ficaria uma nova inicialização caso ocorrece na íntegra.

    Mãos a obra
    Será necessário:

    B) Em cada formulário:
    1. um controle label denominado DestinoLog;
    2. um controle texto denominado DataLog;
    3. uma instrução que verifica o caminho se existe e caso não cria;
    4. uma intrução que cria as variáveis do log e então as aplica.

    C) Uma  tabela denominada SequênciaLog:
    Com dois campos denominados ID e SequênciaLog

    D) Um formulário denominado SequênciaLog com duas instruções:
    Código:
    Private Sub Form_Close()
    'Apaga todos os registros da tabela sem pedir confirmação para evitar o crescimento do banco
       DoCmd.SetWarnings False
       DoCmd.RunSQL "DELETE FROM SequênciaLog"
       DoCmd.SetWarnings True
    End Sub
    Private Sub Form_Load()
       DoCmd.GoToRecord , , acNewRec
    End Sub

    E) Uma instrução que verifica o caminho se existe e caso não, cria o caminho baseado nas informações de data:

    Obs.: O if consegui em pesquisas e dicas aqui no fórum com Avelino Sampaio, a forma de chegar até as variáveis Ano, Mês e MesMaiusculo como eu queria consegui na ajuda do Access, todos fazendo a adequação conforme minha necessidade

    Código:
    Private Sub FncVerificaCaminhoLog()
    'Verifica se existe o caminho e cria as pastas caso não existam
       Dim Ano, Mes, MesMaiusculo, DestinoLog
    'Ano
       Ano = Right(Me.DataLog, 4) ' Retorna os 4 últimos caracteres no campo data
    'Mês
       Mes = MonthName(Month(Me.DataLog)) 'Retorna o nome do mês
       MesMaiusculo = StrConv(Mes, 3) 'Converte a primeira letra de cada palavra em maiúscula
       DestinoLog = "C:\PastadasSuasAplicações\Ceos\Log\" & Ano & "\" & MesMaiusculo & "\" 'Define o local"
    'Verifica o caminho
    On Error Resume Next
    If Len(Dir(DestinoLog, vbDirectory) & "") > 0 Then
       Else
       If Len(Dir(DestinoLog, vbDirectory) & "") = 0 Then
       MkDir "C:\PastadasSuasAplicações\Ceos\Log\"
       MkDir "C:\PastadasSuasAplicações\Ceos\Log\" & Ano & "\"
       MkDir "C:\PastadasSuasAplicações\Ceos\Log\" & Ano & "\" & MesMaiusculo & "\"
    End If
    End If
       Me.DestinoLog.Caption = DestinoLog
    End Sub

    F) Uma intrução que cria as variáveis do log e então as aplica conforme cada interação escolhida:

    Obs.: O básico de como escrever em um arquivo de texto encontrei no link abaixo e a partir dai fui adequando conforme minha necessidade
    Código:
    'http://www.informaticainteligente.com.br/criar-escrever-arquivo-txt-vba/

    'InicioLog----------------------------------------------------------------------------------------
    'Caminho e nome do arquivo de log gerado conforme a data atual
       Dim Caminho As String
       Call FncVerificaCaminhoLog
       Caminho = Me.DestinoLog.Caption & "\LogCeos" & Format(Now(), "ddmmyyyy") & ".txt" 'Define o local"
    'Abre o form SequênciaLog para registrar a sequência de cada log do sistema
       DoCmd.OpenForm "SequênciaLog"
       Forms!SequênciaLog.Visible = False
       Forms!SequênciaLog!SequenciaLog.Value = "NovoContador"
    'Variáveis do log
       Dim SeqLog As String
       Dim Data As Date
       Dim Hora As Date
       Data = Date
       Hora = Time
       SeqLog = Forms!SequênciaLog.ID
       On Error Resume Next
       Dim iArq As Long
       iArq = FreeFile
       'Registra o log
           Open Caminho For Append As iArq
           Print #iArq, SeqLog & " - " & Data & " - " & Hora & " | Seu texto descrevendo algo que foi realizado ou capturando informações dos campos." 'Imprime o texto no arquivo
           Close iArq
           DoCmd.Close acForm, "SequênciaLog"
       'FimLog-------------------------------------------------------------------------------------------

    G) Como usar:

    Em cada Procedimento do Evento do formulário ou campo ao qual eu queria um log acrescentei uma instrução de log + instrução de caminho do log e os controles DataLog e Destino Log no formulário, os controles permanecem ocultos no formulário.

    Em casos em que exista vários Ifs aninhados como forma de tomada de decisões conforme cada caso basta colocar assim:

    Código:
    'InicioLog----------------------------------------------------------------------------------------
    'Caminho e nome do arquivo de log gerado conforme a data atual
       Dim Caminho As String
       Call FncVerificaCaminhoLog
       Caminho = Me.DestinoLog.Caption & "\LogCeos" & Format(Now(), "ddmmyyyy") & ".txt" 'Define o local"
    'Abre o form SequênciaLog para registrar a sequência de cada log do sistema
       DoCmd.OpenForm "SequênciaLog"
       Forms!SequênciaLog.Visible = False
       Forms!SequênciaLog!SequenciaLog.Value = "NovoContador"
    'Variáveis do log
       Dim SeqLog As String
       Dim Data As Date
       Dim Hora As Date
       Data = Date
       Hora = Time
       SeqLog = Forms!SequênciaLog.ID
       On Error Resume Next
       Dim iArq As Long
       iArq = FreeFile
    if Decisão1 = "SeuCritério" then
    'Registra o log
           Open Caminho For Append As iArq
           Print #iArq, SeqLog & " - " & Data & " - " & Hora & " | Seu texto para a decisão1" 'Imprime o texto no arquivo
           Close iArq
           DoCmd.Close acForm, "SequênciaLog"
       'FimLog-------------------------------------------------------------------------------------------
    Elseif Decisão2 = "SeuCritério" then
    'Registra o log
           Open Caminho For Append As iArq
           Print #iArq, SeqLog & " - " & Data & " - " & Hora & " | Seu texto para a decisão2" 'Imprime o texto no arquivo
           Close iArq
           DoCmd.Close acForm, "SequênciaLog"
       'FimLog-------------------------------------------------------------------------------------------
    Elseif Decisão3 = "SeuCritério" then
    'Registra o log
           Open Caminho For Append As iArq
           Print #iArq, SeqLog & " - " & Data & " - " & Hora & " | Seu texto para a decisão4" 'Imprime o texto no arquivo
           Close iArq
           DoCmd.Close acForm, "SequênciaLog"
       'FimLog-------------------------------------------------------------------------------------------
    Elseif Decisão4 = "SeuCritério" then
    'Registra o log
           Open Caminho For Append As iArq
           Print #iArq, SeqLog & " - " & Data & " - " & Hora & " | Seu texto para a decisão5" 'Imprime o texto no arquivo
           Close iArq
           DoCmd.Close acForm, "SequênciaLog"
       'FimLog-------------------------------------------------------------------------------------------
    Else
    End If

    Deixo um exemplo prático do sistema CEOS para quem quiser copiar, existem outras funções no sistema que também aprendi aqui.
    O sistema pode ser reproduzido, alterado ou adaptado.
    Descompactar a pasta diretamente na unidade c:\

    Ceos

    Senhas:
    Administrador = admin
    Usuário = 123

    Obrigado!!!


    Última edição por Marceff@bol.com.br em 24/8/2018, 21:49, editado 1 vez(es)
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5496
    Registrado : 15/03/2013

    Re: Log - Registros das Interações nos Formulários

    Mensagem  ahteixeira em 27/8/2018, 10:35

    Olá Marcelino,

    Obrigado pela partilha, o fórum agradece.

    Abraço

    leoni_dias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 125
    Registrado : 14/08/2011

    Re: Log - Registros das Interações nos Formulários

    Mensagem  leoni_dias em 5/9/2018, 13:57

    Bom dia.

    Tentando contribuir, encontrei esse exemplo na net e usu para gravar um arquivo de texto e log. Achei mais fácil.


    **************************************************************************
    Função para criar (se não criado) e escrever o arquivo de texto

    Function EscribeDadosTxt(Texto As String)
    On Error GoTo Err_EtqiuetaError
    Dim NumeroArchivo
    NumeroArchivo = FreeFile
    Open "c:\Winttl\Dados.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, Texto ' Escribe con Print
    Close #NumeroArchivo
    Exit_EtqiuetaError:
    Exit Function

    Err_EtqiuetaError:

    MsgBox "Aviso Nº " & Err.Number & " do meu programa" & Chr(13) _
    & Err.Description, vbCritical + vbOKOnly, "Aviso de Erros"
    Resume Exit_EtqiuetaError
    End Function

    *************************************************************************
    Uso nos forms:

    EscribeDadosTxt ("Final da seção de trabalho ")

    *************************************************************************

    Desculpem se não consegui ajudar.

      Data/hora atual: 26/9/2018, 00:37