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:
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
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
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:
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!!!
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)