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]Formulário com filtros sequênciais

    avatar
    Roselip
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 66
    Registrado : 18/09/2013

    [Resolvido]Formulário com filtros sequênciais Empty [Resolvido]Formulário com filtros sequênciais

    Mensagem  Roselip 11/12/2013, 00:23

    Boa noite,
    Mais uma vez preciso da ajuda do forum.
    Eu encontrei na net um vba que monta consulta num formulário com filtros sequenciais de buscas e traz todas as informações da tabela relacionada ao filtro selecionado.
    Tenho um conhecimento muito primário em vba, e não consegui entender bem o processo.
    Gostaria que alguém me explicasse os passos do vba para melhor entender e comentar os erros do meu formulário.
    Também gostaria que as somas das entradas e saídas fossem relacionadas a pesquisa do filtro.

    Outra coisa, que gostaria de aprender: posso num formulário trocar a tabela relacionada do formulário por outra?

    Estou anexando o modelo.
    obrigada!
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Formulário com filtros sequênciais Empty Re: [Resolvido]Formulário com filtros sequênciais

    Mensagem  Dilson 13/12/2013, 21:51

    Olha, pelo que vi o que tem de programação está bem comentado.

    Ao fato de não funcionar é porque está faltando no seu projeto a Função chamada FiltroSequencial a qual está sendo chamada por toda parte do seu vba. Encontre esta função e implemente no projeto que o sistema vai começar a funcionar.
    avatar
    Roselip
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 66
    Registrado : 18/09/2013

    [Resolvido]Formulário com filtros sequênciais Empty Re: [Resolvido]Formulário com filtros sequênciais

    Mensagem  Roselip 14/12/2013, 12:50

    Acho que não entendi bem sua resposta, porque se for os filtros sequenciais que estou pensando, esses estão na parte abaixo do vba e mesmo assim não funiona.
    Então como isso seria montado?



    Option Compare Database


    '---------------------------------------------------------------------------------------
    ' Procedimento : btRemoveFiltro_Click
    ' Chamada : Botão Remover o filtro
    ' Função : Reinicia o formulário
    '---------------------------------------------------------------------------------------
    '
    Private Sub btRemoveFiltro_Click()

    'Reinicia os filtros
    DoCmd.ShowAllRecords
    Me.Filter = ""
    Me.FilterOn = False


    Dim frm As Form
    Dim ctrl As Control
    Dim varNomeControle As String

    'Atribui a referência do formulário à variável
    Set frm = Screen.ActiveForm
    Me.Requery

    'Verifica se o RecordSource do formulário é uma instrução SQL
    'ou uma tabela/consulta

    Dim varRecSource As String 'Variável para o RecordSource
    Dim varTabela As String 'Variável para o nome da tabela

    'Define a variável para o formulário ativo
    varRecSource = Screen.ActiveForm.RecordSource

    'Verifica se a variável possui a string "Select" (ou seja, se é uma
    'instrução SQL

    'Se for instrução SQL, pega a parte da instrução referente ao nome da Tabela
    If InStr(1, varRecSource, "Select") <> 0 Then
    varTabela = Mid(varRecSource, 9, (InStr(1, varRecSource, ".") - 10))
    Debug.Print "varTabela - Select : " & varTabela
    'Caso contrário, pega o nome da tabela
    Else
    varTabela = varRecSource
    Debug.Print "varTabela - Tabela : " & varTabela

    End If


    'Reinicia o rowsource das caixas de cominação, limpa os campos
    'e habilita os controles

    For Each ctrl In frm.Controls
    If Mid(ctrl.Nome, 1, 2) = "fm" Then
    varNomeControle = ctrl.Name
    ctrl.Value = ""

    rsoSQL = "" & _
    "SELECT " & varTabela & "." & Mid(varNomeControle, 3, (Len(varNomeControle) - 2)) & " " & _
    "FROM " & varTabela & " " & _
    "GROUP BY " & Mid(varNomeControle, 3, (Len(varNomeControle) - 2)) & " " & _
    "ORDER BY " & Mid(varNomeControle, 3, (Len(varNomeControle) - 2))
    Debug.Print "rsoSQL > " & rsoSQL
    Debug.Print ""

    Me(varNomeControle).Enabled = True
    Me(varNomeControle).RowSource = rsoSQL
    Me(varNomeControle).Requery

    End If
    Next

    'Reinicia as variávels globais
    varFiAc = ""
    varGroup = ""
    End Sub




    '---------------------------------------------------------------------------------------
    ' Chamada : Seleção no filtro de Nomes (nome da c.combinação AAAA)
    ' Função :
    '---------------------------------------------------------------------------------------
    Private Sub fmGrupo_AfterUpdate()
    Call FiltroSequencial
    End Sub


    Private Sub fmSubgrupo_AfterUpdate()
    Call FiltroSequencial
    End Sub

    Private Sub fmCodigoCliente_AfterUpdate()
    Call FiltroSequencial
    End Sub

    Private Sub fmRazaoSocial_AfterUpdate()
    Call FiltroSequencial
    End Sub

    Private Sub fmFantasia_AfterUpdate()
    Call FiltroSequencial
    End Sub

    Private Sub fmNumeroPedido_AfterUpdate()
    Call FiltroSequencial
    End Sub

    Private Sub fmEntrada_AfterUpdate()
    Call FiltroSequencial
    End Sub


    Private Sub fmSaida_AfterUpdate()
    Call FiltroSequencial
    End Sub
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Formulário com filtros sequênciais Empty Re: [Resolvido]Formulário com filtros sequênciais

    Mensagem  Dilson 18/12/2013, 00:25

    Olá,

    Veja, no seu vba só tem a funcionalidade no botão btRemoveFiltro_Click que quando clica remove os filtros.

    Agora repare que nos controles existe a seguinte chamada: Call FiltroSequencial

    Aí podemos perguntar: Cadê a função chamada FiltroSequencial ?

    Você deveria ter esta função no vba no seguinte formato:

    Function FiltroSequencial()
       'Variáveis
       'Comandos que realizam a filtragem

    End Function



    Pode ser que esteja como uma Sub, assim:

    Sub FiltroSequencial()
       'Variáveis
       'Comandos que realizam a filtragem

    End Sub



    Ou seja, você faz a chamada (Call FiltroSequencial), no entanto você não tem a função que vai processar essa chamada.

    Deu pra sacar ?
    avatar
    Roselip
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 66
    Registrado : 18/09/2013

    [Resolvido]Formulário com filtros sequênciais Empty Re: [Resolvido]Formulário com filtros sequênciais

    Mensagem  Roselip 20/12/2013, 00:43

    Ola :placeholder

    Realmente esqueci de enviar junto o modulo que faz a função do filtro sequencial.
    mesmo assim vai para o depurador e não sei como corrigir, porque sou bem leiga na programação vba, mas quero entender, se puder me ajudar.

    Segue novamente o anexo.
    obrigada!
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Formulário com filtros sequênciais Empty Re: [Resolvido]Formulário com filtros sequênciais

    Mensagem  Dilson 20/12/2013, 06:04

    Oi,

    Para funcionar só precisei retirar o numeral que iniciava o nome da tabela (deixei somente CAIXA) e ir nas propriedades do formulário e mudar o modo padrão de formulário simples para formulário contínuo.

    O número 1 que iniciava o nome da tabela estava conflitando, isto porque e é certo que dentro das regras de normalização é recomendado que o nome das entidades não comecem com números; Já o segundo ponto é que sempre aparecia somente um registro, exatamente porque como formulário simples só aparece um por vez.

    Ainda persiste um erro que é tipo indefinido quando seleciona o controle código do cliente, isto porque o módulo foi programado usando a variável denominada varFiAc que é do tipo (string) texto e o dado é do tipo número.

    Tem um erro que está depurando que é:
    If Mid(ctrl.Nome, 1, 2) = "fm" Then

    Troque para:
    If Mid(ctrl.Name, 1, 2) = "fm" Then

    Explicar talvez eu me torne repetitivo pois o módulo está bem comentado e lá está dizendo passo a passo o que executa. O que posso resumir é que através de variáveis o módulo realiza concatenações do nome da tabela que captura pelo recordsource do formulário e o nome dos controles através da estrutura foreach e com isso monta o sql que traz o resultado.

    Pode trocar sim a tabela por outra desde relacione corretamente as fonte de registro de cada campo.
    avatar
    Roselip
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 66
    Registrado : 18/09/2013

    [Resolvido]Formulário com filtros sequênciais Empty Re: [Resolvido]Formulário com filtros sequênciais

    Mensagem  Roselip 24/12/2013, 01:49


    Agora funcionou, muito obrigada e feliz natal!
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Formulário com filtros sequênciais Empty Re: [Resolvido]Formulário com filtros sequênciais

    Mensagem  Dilson 24/12/2013, 02:23

    Obrigado por retornar com o feedback. Isso é importante para todos do fórum.

    Feliz Natal!

    Conteúdo patrocinado


    [Resolvido]Formulário com filtros sequênciais Empty Re: [Resolvido]Formulário com filtros sequênciais

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/4/2024, 10:05