Filtros sequenciais para subformulários

O exemplo mostra como criar filtros através de caixas de combinação em um formulário que vão afunilando os resultados do subformulário conforme vão sendo aplicados.

Por exemplo, ao filtrar uma cidade somente os registros referentes àquela cidade são mostrados no formulário e as caixas de combinação dos demais  filtros também apresentam somente os itens relacionados a essa cidade.

A filtragem pode ser iniciada em qualquer das caixas de combinação e pode ser feita em qualquer ordem.

Arquitetura

1) Na adaptação do exemplo para o seu programa você deve impor que o nome das caixas de combinação tenham o prefixo “fm” + “nome do campo do subformulário” que ela seleciona.

Por. ex.: Nome do campo do subformulário = Cidade -> Nome da caixa de combinação -> fmCidade.

2) Em partes do código você terá que substituir a referência ao formulário e subformulário existentes pelos nomes do seu formulário e subformulário. Esses locais estão destacados no código da função.

Você pode criar quantos conjuntos de caixa de combinação e campo quiser.

Uma função cria a SQL para a origem dos registros do subformulário e para a origem da linha das caixas de combinação a cada filtragem que é feita.

O código está comentado !

SÓ VALE PARA CAMPOS DO TIPO TEXTO !!!

Veja também : Filtros sequenciais em formulários

Antes de baixar, veja este exemplo que é muito mais versátil

 


Veja os termos de uso na página Sobre

15 Responses to Filtros sequenciais para subformulários

  1. Irailson disse:

    Olá amigo, boa tarde,

    estou procurando um exemplo como este, felizmente encontri aqui,,,

    PORÉM O LINK DO DOWNLOAD TÁ “QUEBRADO”

  2. Verifiquei o link e está funcionando.
    Tente novamente

    Abraço

    Paulão

  3. Márcio disse:

    Olá amigo!
    Gostei muito do seu exemplo. Creio que será a solulção para a minha dissertação.
    Eu gostaria de usar os filtros logo após uma pesquisa feita em caixa de texto. Consegui. O problema é que, quando uso o filtro, aparece sub ou function não definida, na combo selecionada.
    Alguma sugestão?
    Abraços!

    • Marcio

      O problema está ocorrendo na adaptação que você fez ou no programa original ?
      Se possível mande mais detalhes ou o seu programa (tem que ser na versão 2000) para eu poder dar uma olhada.

      Abraço

      Paulão

  4. Iam Armstrong disse:

    irmão tentei aplicar mais combo e não deu certo, copiei igual as outras e não deu certo como eu aplico mais combo, ou 3 é o limite.
    trabalho com geração de energia e seriam muitos dados para filtrar, será que vc pode me dar esta dica, de aplicar mais combo???

    wlw!! bgdOOOO!!

    • Ajudaria saber o que não deu certo !

      Verifique se os campos que você está tentando filtrar são do tipo texto.

      O limite para o número de caixas de combinação de filtragem é dada pelo tamanho (255 caracteres) da SQL que é recordsource das mesmas.

      Abraço

      Paulo

  5. Leonardo disse:

    Boa noite Paulo R. Robilotta,

    Sou leigo no Access e tenho uma necessidade de aplicar este exemplo “Filtros sequenciais para subformulários” excepcional em meu B.D. apesar de toda a explicação dada nos comentários não consigo modificar preciso muito de ajuda, em minha tabela são três itens que tenho a necessidade com seguintes Nomes: STATUS_RC – PACOTES – ID Todos do tipo TEXTO

    Desde já agradeço

    Enquanto isto vou inssitindo.

  6. Leonardo disse:

    Boa noite Paulo R. Robilotta,

    Sou leigo no Access e tenho uma necessidade de aplicar este exemplo “Filtros sequenciais para subformulários” excepcional em meu B.D. apesar de toda a explicação dada nos comentários não consigo modificar preciso muito de ajuda, em minha tabela são três itens que tenho a necessidade com seguintes Nomes: STATUS_RC – PACOTES – ID Todos do tipo TEXTO

    Desde já agradeço!

    Enquanto isto vou insistindo.

  7. ailton soares da silva disse:

    Quero usar dois textbox e não combobox para filtrar, é possível?
    Como ficaria?
    No 1º textbox vou filtrar o centro de trabalho.ex: 0043;0054;0058…, e no segundo textbox a data e quando o filtro for removido mostre todos o registros.

    Desde já agradeço.

    • Ailton

      Não é possivel por dois motivos diferentes:

      1) O que o exemplo faz é reconstruir a ORIGEM DA LINHA dos filtros após cada filtragem. Caixas de texto não tem origem da linha mas sim Origem do registro.
      2) Neste exemplo só é possível filtrar campos do tipo TEXTO. Por isso, não é possível filtrar datas.

      Abraço

      Paulo

  8. Fernando disse:

    Olá… Eu baixei o arquivo, dei uma olhada em todas as propriedades e funções do exemplo. Tentei aplicar no meu banco de dados mas quando vou testar minha combox aparece escrito Sub ou Função não definida e aparece destacado Call FiltroSubformulario.

    O que pode estar errado? Ah reparei que nas referencias o segundo item está 11.0 e no passo a passo está 9.0…

    • Fernando

      Essa mensagem aparece porque a instrução da caixa de combinação faz a chamada dessa função que está no módulo FS do exemplo.

      Você importou o módulo para o banco de dados que você está criando ?

      Sobre as referências : não achei nada que se refira a “passo a passo” no exemplo.
      Por favor, explique melhor.

      Abraço

      Paulo

  9. Fernando disse:

    Então no passo a passo do item 6 pede que deixe assinalados os itens como na figura, no segundo item aparece escrito “microsoft access 9.0 object library” e no meu aparece 11.0, estou usando o access 2003.

    Esse modulo que se refere seria seu formulario FS? Na verdade eu copiei todas as linhas de comando do exemplo pro meu bco de dados substituindo apenas os nomes dos formularios e subformularios e acrescentando fm na frente do nome das combox como descrito no exemplo.

    Estou usando apenas uma tabela com varios campos e fiz um formulario baseado nessa tabela para ir alimentando o bco de dados. Só que ao inves de fazer uma consulta para cada campo eu gostaria de utilizar os filtros como no exemplo, encaixaria perfeitamente e seria muito mais simples e pratico.

    Olhando pras linhas de comando consegui entender o comando “Call”, o porque dos “fm” mas não consegui compreender o “FiltroSubformulario” onde que ele se encaixa no seu modulo?

  10. Almir Pires disse:

    Caro amigo, precisei fazer um trabalho aqui na empresa em que sua solução se encaixa perfeitamente.
    Peguei seu próprio arquivo MDB, entrei na Tabela Dados, renomeei as colunas e criei outras.
    Segui seu Passo-Passo (https://accessporexemplo.wordpress.com/filtros-subform-passo-a-passo) para efeituar todos os outros ajustes, renomeando tudo conforme instrução.
    Porém não está funcionando.

    1) Ao efetuar um segundo filtro, recebo o seguinte erro: “A fonte de registro ‘SELECT APLICACAO FROM ado GROUP BY APLICACAO,TIPO HAVING TIPO = ‘SERVIÇO’ especificada neste formulário ou relatório não existe.”
    TIPO e APLICACAO são campos que editei na Tabela Dados.

    2) Após isto, quando clico em “Remover Filtro” e seleciono algum filtro, recebo a mensagem “ado.TIPO” ou “ado.APLICACAO”.

    Acho que estou muito perto de conseguir concluir minha adaptação, teria como me ajudar?
    Caso facilite sua análise do problema, posso lhe enviar o arquivo MDB se me informar um email.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: