Filtros sequenciais
Neste exemplo é mostrado como criar filtros que vão afunilando os resultados 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
A única exigência em termos estruturais é que o nome da caixa de combinação tenha o prefixo “fm” + “origem do registro” do campo que ela seleciona.
Por. ex.: Origem do registro do campo = Cidade -> Nome da caixa de combinação -> fmCidade.
Você pode criar quantos conjuntos de caixa de combinação e campo quiser.
Uma função cria a SQL para o filtro e para a Origem da linha das caixas de combinação a cada filtragem que é feita.
O código está comentado e são necessárias poucas alterações para adaptá-lo às suas necessidades.
SÓ VALE PARA CAMPOS DO TIPO TEXTO !!!
Veja a nova versão que filtra outros tipos de campo : Filtros Sequenciais V2
Veja também : Filtros sequencias para subformulários
Antes de baixar, veja este exemplo que é muito mais versátil
(Versão 0.07 – Revisada em 31/07/10)
Muito bom !!
Mas gostaria de ajuda para alterar. Pois no momento que estou intercalando seleção entre uma caixa e outra esta ocorrendo msg(Tipo de dados incompatíveis na expressão de critério), após msg o combo fica em branco.
Outro evento é quando seleciona botão de limpar filtros, onde ocorre o seguinte erro, quando clica para selecionar valores no compo para novo filtro (Erro de sintaxe na expressão de consulta ‘008_operacao.local_operacao’.) sendo que o combo perde os valores e fica vazio. Voltando ao normal quando fecho e abro o form novamente.
Malfer
O erro está ocorrendo no exemplo ou na adaptação que você está fazendo ?
Se for na adaptação, a mensagem “Tipo de dados incompatíveis …” deve estar ocorrendo porque o campo que você está tentando selecionar NÃO deve ser do tipo texto. Se isso for verdade, o erro ao tentar limpar os filtros é decorrente do anterior.
Abraço
Paulão
Gostaria de aplicar um desses filtros a um campo memorando, e que o criterio de busca fosse “Contém” e não “é igual à”
Estou usando
DoCmd.ApplyFilter , “campo = ‘” & fmcampo & “‘”
testei colocar *s mas não obtive sucesso.
Como posso fazer isso?
Henrique
Se você for usar o campo tipo memorando em conjunto com outros campos em que o critério for “igual a”, não vai conseguir o resultado desejado. Isto porque tanto a SQL usada como filtro como a usada como RowSource da caixa de combinação são construídas “em bloco” através da instrução “For Each ctrl In frm.Controls” e nelas o critério é “igual a”.
Se você estiver tentando usar o filtro apenas para o seu campo memorando e digamos que ele contenha as seguintes frases:
1) A cidade de Campinas fica em São Paulo
2) Eu moro em Campinas
Para achar os registros que contém a palavra Campinas, você teria que usar uma SQL com um critério como o abaixo:
SELECT [Dados].[memo]
FROM Dados
WHERE ((([Dados].[memo]) Like “*Campinas*”));
Observe que antes e depois de Campinas há um asterico.
Abraço
Paulão
Bom dia!
Adorei o site e já inclui em meus materias de pesquisa. Porém cheguei até ele por uma necessidade:
Possuo 3 combos com informações fixas e preciso que ao selecionar um combo em qualquer ordem o meu sub formulário fosse filtrado.
Em outras palavras os filtros não são sequenciais, porém caso escolha mais de uma opção que seja aplicado o filtro dentro do filtro existente.
Obrigado
Otacilio
Seu comentário deu frutos !
Veja o post do dia 14/6/10
Abraço
Paulão
Olá. Bom dia. estou tentando adaptar seu exemplo de filtro sequencial a uma necessidade particular e não estou conseguindo. Já descobri que é na coluna SOBRENOME.
Vou dizer o que estou tentando fazer.
Estou usando o campo NOME no formato 000000-0 (como texto mesmo).
Estou usando o campo SOBRENOME no formato 00000.000000/0000-00 (texto também).
Estou usando o campo CIDADE como texto normal sem formatação.
Percebi que o problema está no campo SOBRENOME. Existe alguma restrição ao formato que estou usando? mesmo sendo tratado como texto?
Obrigado
Juarez
Mandei um email solicitando mais informações.
Abraço
Paulão
Ups até me assustei quando cliquei em download e vim parar aqui. Bom Bblog. Excelente e bom exemplo
Gostei muito da aplicação Formulário sempre no topo que decidi baixar esta. Muito bem, parabéns pelo Blog. Vou deixar um post também na SVC para que a galera saiba desta aplicação.
Parabéns. Serviu-me perfeitamente como exemplo.
Parabéns pelo tarabalho. Excelente!
adorei o seu blog mas gostaria de colocar umas duvidas.
1º No exemplo dado estão todos os registos numa folha de dados e eu gostaria de saber como é que depois de filtrar o que interessa ele mostre o resultado do filtro após carregar no botão ok e ele criar um relatório.
2º como é que eu posso pesquisar uma palavra “Almirante” inserida de várias formas como por exemplo:
Almirantes
Almir.
Alm.
e no fim ele listar tudo conforme o que inseri.
No filtro normal tem a opcção contem e ai eu posso colocar alm e o filtro mostra tudo que contenha alm.
Obrigado e continuação de bom trabalho
muito bom !!! consegui fazer a adaptação.
Tentei fazer a adaptação para outro form, (com outro módulo), mas estraguei tudo, agora nem um nem outro.
Alguem pode dar umas dicas?
ob
Muito bom, mas minha adaptação esta dando erro:
Quando seleciono o filtro fica em branco o resultado (lista) mas esta mostrando 1 filtrado.
Quando removo o filtro volta a lista.
Quando clico novamente no filtro, retorna erro de sintaxe na origem.
Já revisei e não acho o erro.
Manda mais detalhes ou o teu programa (tem que ser na versão 2000 do Access) para eu tentar descobrir o erro.
Abraço
Paulão
Boa tarde, estou com um problema para executar uma consulta que filtre dados em um campo texto, de acordo com o que eu escrevo numa caixa texto num formulário.
SELECT emop.DESCRICAO
FROM emop
WHERE ((([emop.descricao]) Like [Formulários]![C-Filtra Serviços]![Texto2]));
Sérgio
Qual é o problema que ocorre ao tentar executar a consulta ? Ela filtra dados errados; dá alguma mensagem de erro ?
Abraço
Paulão
Vê se pode me ajudar…. tenho um formulário que ligado a uma consulta. Nesta consula no campo critério inseri tres combobox do formulário para filtrar os registros.
A duvida é a seguinte: é possível anular uma combox de (ou colocar opção exibir todos registros). Ocorre que tenho que selecionar as tres combox para que exiba os registros. Enfim gostaria que o formulário exibisse todos os registros caso não queira usar a combobox.
(espero ter sido claro o suficiente para explanar minha duvida)
Rogerio
Desculpa aí, mas tá confusa a tua dúvida.
Ao invés de tentar me explicar como você está tentando fazer, me explica o quê você quer fazer.
Abraço
Paulão
Paulão,
Não consigo baixar o arquivo.
Abraço
Boa Noite,
Como faço para filtrar uma consulta de tabela cruzada?
Ela da um erro tipo não conhece o comando ..
Abraços
Estava tentando usar seu exemplo, porém descobri que o Access já possui uma função parecida: FiltrarPorFormulário. Basta criar uma macro Executar Comando > FiltrarPorFormulário.
Foi uma alternativa mais facil pra mim, já que nao tenho conhecimento em VB.
Abraço
Estou usando o código fonte desse exemplo, fiz algumas alterações e ficou muito bom, só que me deparei com um problema.
Eu configurei para que quando entro no Form de Pesquisa, os dados cadastrados apareçam de forma decrescente “[IMOVEIS].[DataEntrada] DESC”, porem quando filtro os dados eles aparecem de forma crescente (mostrando o primeiro registro), quando removo o filtro ele mostra de forma crescente também, estou tentando deixar ele de forma decrescente quando se aplica o filtro e quando se remove o mesmo, más estou tendo dificuldades.
Se quizer te mando o código fonte do Sistema, mas por favor me ajude.
Bom dia! Estou tentado fazer um formulario de cadastro onde o usuário tem que informa o seu endereço, porém gostaria que o mesmo selecionasse primeiro a Combobox Estado para depois selecionar a combobox cidade sendo que a segunda só traria as cidades referente ao estado selecionado na primeira essa mesma regra será aplicada a combo bairro que ira efetuar carregar somente os bairros da cidade selecionada. Como fazer isso já tentei váriias forma porem nada deu certo. Pensei que assim resolveria SELECT conCidade.codigo, conCidade.cidade FROM conCidade WHERE (((conCidade.estado)=[Formulários]![fmendereco]![estado])); mas não funcionou, alguém sabe como posso resolver esse problema?
4lamp
Existem três possibilidades :
1) Se você só quer resolver o seu problema, use o exemplo do link abaixo como modelo:
https://accessporexemplo.wordpress.com/2012/01/07/access-filtros-sequenciais-versao-2/
2) Se você quer aprender como fazer, dá uma olhada na página do link abaixo que mostra como formatar uma cláusula Where
https://accessporexemplo.wordpress.com/assuntos/clausula-where-como-escrever-criterios-no-access/
3) Procura na página do link abaixo pelo item Caixa de combinação -> Formulário e depois algum dos exemplos sobre Caixa de combinação em cascata.
https://accessporexemplo.wordpress.com/assuntos/topicos-ordenados-por-palavra-chave/#Caixa de combinação
Abraço
Paulo
Bom dia Paulo, tudo bem?
Estou precisando utilizar estes conceitos de caixas de combinação em um formulário que utilizaremos aqui no trabalho. O detalhe é que estamos usando Office 2007/2010, seus exemplos funcionam nele? Nos testes que fiz aqui tanto o formulário v1 quanto o V2 não funcionaram, e o filtro de subformulário também não.
Não sei se é possível, mas se este for o caso acredito que seria interessante atualizar os códigos para que funcionem normalmente nas versões mais recentes de Office.
Abraços, e obrigado!
Claudio
Cláudio
Testei todos os exemplos que você citou no Access 2007 (não tenho o 2010) e eles funcionaram perfeitamente.
Dá uma explicada no que significa “não funcionaram” que talvez eu possa te ajudar.
Abraço
Paulo
Ola importei os 02 formularios FS E FSSUB PARA MEU ACCess 2000 . Importei tambem modulo FS
Eu tenho tabela que tem os campos NCHEQUE(REFERE-SE AO NUMERO DO CHEQUE) NOME e BANCO . Nas caixas de combinação troquei os nomes dos campos para estes nomes .
Atribui ao sub formulario uma consulta da tabela cheque para poder filtrar valores nulos no campo NCHEQUE . Quando clico no botão REMOVER FILTRO ele limpa todas informações do subformulario . Quando clico em filtro em qualquer caixa de combinação da a mensagem que ele não localizou a tabela .
Carlos
Me parece que você está usando o exemplo referente a Filtros sequenciais para subformulários e não o exemplo desta página.
Já faz tempo que criei o exemplo acima e não tenho tudo fresco na cabeça, mas parece é que você colocou um critério no campo NCHEQUE para filtrar os valores nulos e usou essa consulta no subformulário.
Se for isto, não vai funcionar. A SQL que é origem do registro do subformulário só pode ter os campos sem nenhum critério, pois o código que faz a filtragem lê a SQL original e a reescreve incluindo os filtros das caixas de combinação e nessa reescrita não inclui o critério.
Experimenta fazer o seguinte:
1) Crie uma consulta com todos os campos que te interessam e aplique nela o critério para NCHEQUE nulo.
2) Crie uma segunda consulta a partir da anterior só com os campos e use esta como origem do registro do seu subformulário.
Só para reforçar : as origens do registro do formulário e subformulário tem que ser instruções SQL e não os nomes de tabelas ou consultas.
Tente esta solução e dá um retorno para eu saber se funcionou.
Abraço
Paulo
E ai blz…muito bom eu estava precisando de um exemplo desse..
Agora eu estou precisando criar um botão para exportar os dados do filtro para o Excel…vc consegue me ajudar?
Boa noite !
Criei um filtro que busca dados de uma consulta, e após selecionar, eu dou um duplo click, e então ele abre um outro formulário exatamente com um dos itens que eu escolhi com um duplo click. esta funcionando bem. Sendo que estou querendo em vez de abrir um outro formulário gostaria de abrir uma página em HTML sobre o mesmo assunto.
As páginas HTML já estão montadas por assuntos, sendo que desejo fazer uma pesquisa no access primeiro.
Pode me ajudar, não estou conseguindo. Obrigado !
André
Crie um campo do tipo hyperlink na origem dos dados da sua consulta e coloque nele o endereço da página HTML associada ao assunto que você selecionou.
No formulário onde você dá o duplo click para selecionar o assunto, exiba este campo tipo hyperlink. Ao clicar nele, será aberto o seu navegador com a correspondente página HTML.
Se você quiser mostrar a página HTML dentro de um formulário do Access, dá uma olhada no exemplo “Navegador para internet” do link abaixo.
https://accessporexemplo.wordpress.com/exemplos/meusexemplos/navegador-para-internet/
Abraço
Paulo
Boas, adorei este exemplo e pode dar muito jeito aqui para um trabalho que tenho para fazer.
Gostaria apenas de alterar o seguinte:
Nome –> Dia
Sobrenome –> Hora
Cidade –> Morada
Profissão –> Observações
Já tentei mas não consigo alterar só esses nomes.
Desde já obrigado
Johnny
Este exemplo só funciona para campos tipo texto.
Dá uma olhada na versão 2 (https://accessporexemplo.wordpress.com/2012/01/07/access-filtros-sequenciais-versao-2/) do exemplo.
Acho que vai resolver o teu problema .
Abraço
Paulo
Muito obrigado pelo esclarecimento.
Agora sim funciona tudo na perfeição, obrigado 🙂