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]Código VBA para de funcionar após algum tempo

    Claudinei
    Claudinei
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 24/05/2010

    [Resolvido]Código VBA para de funcionar após algum tempo Empty [Resolvido]Código VBA para de funcionar após algum tempo

    Mensagem  Claudinei 18/10/2023, 19:27

    Boa tarde a todos !

    Uso um código para filtrar um relatório com base nas informações do formulário de filtro, esse código funciona perfeitamente, porém após algum tempo ele para de funcionar, quando reinicio o Access volta a funcionar perfeitamente!

    Ainda não consegui resolver meu problema.
    Alguém já se deparou com esse tipo de problema que possa me dar um help ?!
    avatar
    abreuluiston
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 73
    Registrado : 24/07/2023

    [Resolvido]Código VBA para de funcionar após algum tempo Empty Re: [Resolvido]Código VBA para de funcionar após algum tempo

    Mensagem  abreuluiston 19/10/2023, 20:41

    Claudinei, boa-tarde!

    Nunca vi acontecer na verdade. Mas, uma curiosidade: você filtra através de um formulário e executa o relatório com vários filtros distintos, ou seja, você faz um filtro e executa, depois volta refaz o filtro e executa novamente, é isso?

    Se puder anexar o arquivo tento ajudar.

    At.
    Luis Abreu
    Claudinei
    Claudinei
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 24/05/2010

    [Resolvido]Código VBA para de funcionar após algum tempo Empty Re: [Resolvido]Código VBA para de funcionar após algum tempo

    Mensagem  Claudinei 20/10/2023, 02:05

    Boa noite Luis !

    Estou postando o exemplo, na verdade eu tenho um form que preencho vários campos de interesse usando "curingas" e como uso apenas um relatório nele controlo coluna de vencimento caso seja status 1 (a pagar/receber) e a coluna pagamento caso seja status 2 (pago/recebido) talvez seja excesso de filtros, mas o que me deixa botina da vida é o porque o filtro funciona por alguns minutos e depois já não filtra mais nada, se eu fechar e abrir novamente o access ele funciona perfeitamente até não exibir dados, é como se não tivesse dados para serem filtrados !

    Veja:
    [Resolvido]Código VBA para de funcionar após algum tempo 000110

    Resultado:
    [Resolvido]Código VBA para de funcionar após algum tempo 000210

    [Resolvido]Código VBA para de funcionar após algum tempo 000310

    Código:
    'Função montar SQL********************************************************************************
    Function sqlFiltro() As String
    Dim strSQL As String

    'O primeiro bloco de código do filtro não se usa a expressão AND
    If Not IsNull(FiltroStatus) Then
    strSQL = strSQL & "Status LIKE '*" & FiltroStatus & "*'"
    End If

    If Not IsNull(FiltroAPartirLançamento) Then
    strSQL = strSQL & "AND DataLanc >=" & dataSql(FiltroAPartirLançamento)
    End If

    If Not IsNull(FiltroAteLançamento) Then
    strSQL = strSQL & "AND DataLanc <=" & dataSql(FiltroAteLançamento)
    End If

    If Not IsNull(FiltroAPartirVencimento) Then
    strSQL = strSQL & "AND DataVenc >=" & dataSql(FiltroAPartirVencimento)
    End If

    If Not IsNull(FiltroAteVencimento) Then
    strSQL = strSQL & "AND DataVenc <=" & dataSql(FiltroAteVencimento)
    End If

    If Not IsNull(FiltroConta) Then
    strSQL = strSQL & "AND Conta ='" & FiltroConta & "'"
    End If

    If Not IsNull(FiltroCheque) Then
    strSQL = strSQL & "AND NroCheque ='" & FiltroCheque & "'"
    End If

    If Not IsNull(FiltroSaque) Then
    strSQL = strSQL & "AND SaqueReferencia ='" & FiltroSaque & "'"
    End If

    If Not IsNull(FiltroEventoS) Then
    strSQL = strSQL & "AND EventoS LIKE '*" & FiltroEventoS & "*'"
    End If

    If Not IsNull(FiltroEventoE) Then
    strSQL = strSQL & "AND EventoE LIKE '*" & FiltroEventoE & "*'"
    End If

    If Not IsNull(FiltroAtividade) Then
    strSQL = strSQL & "AND Atividade LIKE '*" & FiltroAtividade & "*'"
    End If

    If Not IsNull(FiltroNatureza) Then
    strSQL = strSQL & "AND Natureza LIKE '*" & FiltroNatureza & "*'"
    End If

    If Not IsNull(FiltroDocto) Then
    strSQL = strSQL & "AND NroDocto LIKE '*" & FiltroDocto & "*'"
    End If

    If Not IsNull(FiltroRazao) Then
    strSQL = strSQL & "AND Razao LIKE '*" & FiltroRazao & "*'"
    End If

    If Not IsNull(FiltroClassificacao) Then
    strSQL = strSQL & "AND Classificacao LIKE '*" & FiltroClassificacao & "*'"
    End If

    If Not IsNull(FiltroSaida) Then
    strSQL = strSQL & "AND Saida LIKE '*" & FiltroSaida & "*'"
    End If

    If Not IsNull(FiltroEntrada) Then
    strSQL = strSQL & "AND Entrada LIKE '*" & FiltroEntrada & "*'"
    End If

    If Not IsNull(FiltroComplemento) Then
    strSQL = strSQL & "AND ComplHistorico LIKE '*" & FiltroComplemento & "*'"
    End If

    If Not IsNull(FiltroObservacao) Then
    strSQL = strSQL & "AND Observacao LIKE '*" & FiltroObservacao & "*'"
    End If

    sqlFiltro = IIf(strSQL = "", "", "(" & strSQL & ")")
    End Function

    Segue o link para o download do arquivo:

    1drv.ms/u/s!AsZXjIXTeb4yg8gzEu3gxTQASeDGqw?e=lZCOA3
    avatar
    abreuluiston
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 73
    Registrado : 24/07/2023

    [Resolvido]Código VBA para de funcionar após algum tempo Empty Re: [Resolvido]Código VBA para de funcionar após algum tempo

    Mensagem  abreuluiston 20/10/2023, 16:13

    Claudinei, bom-dia!

    Vou começar dando uma dica para você e para quem acessar esse post futuramente, até porque eu acho que esse é o verdadeiro intuito desse fórum. Não só ajudar a resolver uma questão, mas acima de tudo passar o conhecimento.

    Nada acontece em uma rotina se ela não estiver programada para acontecer. Se a rotina tem algum bug em algum momento ele acontecerá. O erro que você descreve chamamos de intermitente. Ou seja, é algo que acontece esporadicamente. Então, são erros mais difíceis porque é necessário entender o comportamento da rotina e, para isso, o debug é algo fundamental a ser aprendido.

    Eu não conhecia sua rotina então tive que entrar no código e marcar um ponto nele para que eu pudesse seguir o fluxo dos eventos. Vale a pena pegar algum tópico desse fórum para aprender a debugar um código. Não vale eu ficar descrevendo aqui pq sei que tem exemplos bons no fórum.

    Agora sim, vamos lá:

    1) sua rotina da início no form "Administrador".
    2) ao acessar o form você seleciona o relatório "Relatório Analítico Personalizado"
    3) o fluxo segue para uma função chamada "montaSqlAdministrativoGeral" - é uma função que esvazia uma variável global (que é responsável pelo filtro).
    4) essa função faz a chamada do formulário "frmAdministrativoFiltroGeral" - essa chamada desvia o fluxo e o foco sai do formulário "Administrador" e envia o foco para o formulário que está sendo chamado que é justamente onde você efetua os filtros.
    5) nesse ponto você preenche os filtros e clica no botão de filtro. Esse botão tem no evento click a chamada para a função "sqlFiltro". O objetivo dessa função é preencher a variável global "stringSqlGlobal" que possui o filtro que você selecionou no form. Após a resposta dessa função o formulário é fechado e o fluxo volta para o formulário "Administrador".
    6) a rotina do clique inicial dado no form para acesso ao formulário, que está no evento click dele "Geral_Click' dá sequência e é ai que entra o BUG.

    Dentro do IF você verá que o formulário de filtros é chamado novamente - veja a chamada: DoCmd.OpenForm "frmAdministrativoFiltroGeral" na primeira linha do IF. Fiquei curioso o motivo do formulário ser chamado novamente se eu acabei de sair dele.

    Comecei a debugar a partir dai e percebi o seguinte:

    A) se você comentar essa linha, ou seja, impedir que ela execute, todas as vezes que você chama o relatório o debug acontece e o relatório só fica disponível depois que todo o código do término do botão filtro ser executado. Ou seja, o relatório só aparece depois de pressionar o F8 pq o debug executa linha por linha.

    B) se mantiver a rotina como está acontece a intermitência. Ou seja, às vezes ele executa linha a linha e às vezes o relatório aparece imediatamente sem o debug ser executado.

    Ao meu ver o que está acontecendo é que o Access se perde pq o formulário foi chamado indevidamente novamente e horas ele pega o form que está aberto novamente e horas não pega. Isso não sei explicar, mas sei que tirando ele o código executa 100% das vezes e se está executando está filtrando.

    Volto a dizer, falei tudo isso para que fique documentado o que aconteceu. Detalhe, veja que você não me deu o caminho de como as coisas acontecem eu descobri tudo analisando a base. Então, só a minha curiosidade em entender o que estava acontecendo para te ajudar e obviamente o tempo que fiquei analisando é que me deu a oportunidade de te ajudar.

    Então, se minha suspeita estiver correta a única coisa que você precisa fazer é entrar na linha que eu comentei no item 6 acima e comentar a chamada duplicada do form.

    Sugiro que faça isso e trabalhe normalmente com a base para checar se a intermitência termina. Beleza?

    At.
    Luis Abreu
    Claudinei
    Claudinei
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 24/05/2010

    [Resolvido]Código VBA para de funcionar após algum tempo Empty Re: [Resolvido]Código VBA para de funcionar após algum tempo

    Mensagem  Claudinei 20/10/2023, 21:00

    Boa tarde Luis Abreu !

    Demorei um pouco para dar o retorno pois assim que fiz a atualização do código coloquei o programa para rodar e desde então não apresentou mais o problema, eu não tinha me atentado para essa linha de código e realmente funcionou 100%

    Segue como ficaram os códigos:

    ***No módulo Filtro***

    Function montaSqlAdministrativoGeral() As String
    stringSqlGlobal = ""
    DoCmd.OpenForm "frmAdministrativoFiltroGeral", acNormal, , , , acDialog
    montaSqlAdministrativoGeral = stringSqlGlobal
    Exit Function
    End Function


    ***No botão que chama o Form Filtro***

    Private Sub Geral_Click()
    If [Forms]![Administrador]![USysUltimoAcesso]![Nivel] <> "ADMINISTRATIVO" Then
    MsgBox "Permitido somente para o Administrativo", vbInformation, "Acesso restrito!"
    DoCmd.CancelEvent
    Else
    Dim criterio As String
    criterio = montaSqlAdministrativoGeral
    If criterio <> "()" Then
    DoCmd.OpenReport "AdministrativoGeral", acViewReport, , criterio, acWindowNormal
    End If
    End If
    End Sub


    ***No botão do Form Filtro que chama o relatório***

    Private Sub Filtrar_Click()
    Dim criterio As String
    stringSqlGlobal = sqlFiltro
    DoCmd.Close acForm, "frmAdministrativoFiltroGeral"
    End Sub


    Obrigado !

    abreuluiston gosta desta mensagem

    avatar
    abreuluiston
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 73
    Registrado : 24/07/2023

    [Resolvido]Código VBA para de funcionar após algum tempo Empty Re: [Resolvido]Código VBA para de funcionar após algum tempo

    Mensagem  abreuluiston 20/10/2023, 22:48

    Que bom que deu certo.

    Abs.

    Luis Abreu

    Claudinei gosta desta mensagem


    Conteúdo patrocinado


    [Resolvido]Código VBA para de funcionar após algum tempo Empty Re: [Resolvido]Código VBA para de funcionar após algum tempo

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/7/2024, 01:21