Avaliação do Usuário

Estrela ativaEstrela ativaEstrela ativaEstrela ativaEstrela ativa
 


Como buscar e exibir um ou mais registros em um campo de um formulário, seja uma caixa de combinação ou uma caixa de listagem, de acordo com o valor escolhido em outro campo?

Esta é uma das perguntas mais frequentes de usuários que iniciam suas aventuras no mundo da programação. Sendo assim este artigo tenta facilitar o caminho descrevendo em detalhes como montar um esquema bem simples de filtros sequenciais, também chamados de filtros em cascata.

Neste tutorial será abordada uma das formas de se montar um filtro sequencial, utilizando campos com origem de dados fixa, com base no campo de referência do critério. A exibição dos dados filtrados, neste caso, dependerá da atualização dos campos e também da origem de seus dados.

O MODELO DE DADOS

Para a criação deste pequeno projeto vamos precisar de uma tabela simples contendo uma lista de Cidades, com seus respectivos Estados e Países, para que possamos utilizar nosso filtro para buscar as cidades de acordo com o País e o Estado escolhidos.

Este será o modelo da tabela criada:

Tabela Cidade - Filtros em Cascata

Crie a tabela de acordo com as seguintes definições e também com os campos, obedecendo às características abaixo:

Nome da tabela: Cidade

Campos:
codCidade: Numeração Automática - Chave Primária
nomeCidade: Texto - Tamanho 100
estado: Texto - Tamanho 50
pais: Texto - Tamanho 50


O FORMULÁRIO

Vamos agora criar o formulário que receberá os campos que serão utilizados como filtros sequenciais, ou filtros em cascata.

Esta será a aparência do formulário:

Formulário FCascata - Filtros em Cascata
Ajuste o formulário para que obedeça às seguintes características em suas propriedades:

Nome: FCascata
Modo Padrão: Formulário Simples
AutoCentralizar: Sim
Seletores de Registros: Não
Botões de Navegação: Não
Linhas Divisórias: Não
Barras de Rolagem: Nenhuma
Botões Min Max: Nenhum
Pop-up: Sim

Nosso próximo passo será criar e formatar os campos do formulário.



{ads1}

CAMPOS DO FORMULÁRIO

Para que possamos realizar a filtragem dos dados vamos inserir duas caixas de combinação e uma caixa de listagem no nosso formulário, que poderão ser posicionadas de acordo com a imagem anterior.

As propriedades dos campos deverão obedecer às seguintes características:

Caixa de Combinação do País

Nome: cbxPais
Tipo de Origem da Linha: Tabela/Consulta
Origem da Linha: SELECT Cidade.pais FROM Cidade GROUP BY Cidade.pais ORDER BY Cidade.pais;
Valor Padrão: "Escolha um País"

Veja que o código SQL da propriedade Origem da Linha, o qual realiza a busca dos paises da tabela Cidade, está agrupando os dados pelo campo pais. Isto fará com que não sejam exibidos paises repetidos em nossa caixa de combinação.

Caixa de Combinação do Estado

Nome: cbxEstado
Tipo de Origem da Linha: Tabela/Consulta
Origem da Linha: SELECT Cidade.estado FROM Cidade GROUP BY Cidade.estado, Cidade.pais HAVING (((Cidade.pais)=[Formulários]![FCascata]![cbxPais])) ORDER BY Cidade.estado;
Valor Padrão: "Escolha um Estado"

Veja que no código SQL da propriedade Origem da Linha o critério para preenchimento dos dados está baseado no campo cbxPais do formulário FCascata:

HAVING (((Cidade.pais)=[Formulários]![FCascata]![cbxPais]))

Este critério será o responsável por filtrar os estados de acordo com o país escolhido anteriormente. Além disso o código está agrupando os estados e países para evitar exibir dados duplicados no momento da escolha.

Caixa de Listagem da Cidade

Nome: lstCidade
Tipo de Origem da Linha: Tabela/Consulta
Origem da Linha: SELECT Cidade.codCidade, Cidade.nomeCidade AS Cidade, Cidade.estado AS Estado, Cidade.pais AS País FROM Cidade WHERE (((Cidade.estado)=[Formulários]![FCascata]![cbxEstado])) ORDER BY Cidade.nomeCidade;
Coluna Acoplada: 1
Número de Colunas: 4
Larguras das Colunas: 0cm;5cm;4cm;3cm
Cabeçalhos das Colunas: Sim
Largura: 12cm

Perceba que o código SQL responsável por buscar os dados das cidades utiliza como critério o estado escolhido no campo cbxEstado do formulário FCascata:

WHERE (((Cidade.estado)=[Formulários]![FCascata]![cbxEstado]))

A caixa de listagem também apresenta os dados completos de cada cidade, com exceção do código, cuja coluna fica oculta (0cm) durante a exibição. Entretanto ao escolher uma cidade na lista, na verdade estamos escolhendo o seu código, pois o campo codCidade é que está na posição da coluna acoplada da caixa de listagem.

CODIFICAÇÃO DOS CAMPOS

Até o momento criamos a tabela, o formulário e os campos caixa de combinação e caixa de listagem que exibirão os dados. Contudo as propriedades que ajustamos nos campos estão prontas apenas para exibir os valores iniciais, ou seja, aqueles escolhidos ao abirmos o formulário.

Assim, para que o nosso filtro em cascata funcione devemo incluir os códigos que farão a atualização dos dados no momento em que escolhermos algum novo valor no campo País ou no campo Estado.
Primeiramente vamos inserir o código que será acionado ao escolhermos um novo país. Este código fará a atualização da origem de dados do campo cbxEstado, incluindo também o texto "Escolha um Estado" novamente no campo, além de atualizar a origem dos dados do campo lstCidade.

O código abaixo deverá ser inserido no evento Após Atualizar do campo cbxPais:

Private Sub cbxPais_AfterUpdate()
 
 'Atualizando a listagem
 'de estados
 cbxEstado.Requery
 
 'Reajustando o valor do campo
 'para solicitar a escolha
 'de um estado
 cbxEstado = "Escolha um Estado"
 
 'Atualizando a listagem
 'de cidades
 lstCidade.Requery
 
End Sub


Em seguida vamos codificar o procedimento que fará a atualização das cidades após escolhermos um estado. Este código será responsável pelo preenchimento da caixa de listagem, de acordo com o valor atual do campo Estado.

O código deverá ser inserido no evento Após Atualizar do campo cbxEstado:

Private Sub cbxEstado_AfterUpdate()
 
 'Atualizando a listagem
 'de cidades
 lstCidade.Requery
 
End Sub


O exemplo criado neste artigo estará disponível na seção de downloads do Mabesi.com para que você possa estudar sua implementação, apesar de ser um aplicativo bem simples. O recomendado é que você tente montá-lo apenas seguindo as instruções, pois assim o aprendizado será muito mais eficiente.

Exemplo para download: FiltroCascata.zip

Por favor, caso tenham dúvidas a respeito desta implementação ou da utilização desta abordagem em seu sistema em particular, crie um tópico em nosso fórum. Esta é a maneira mais adequada de conseguir ajuda de nossos millhares de usuários.

Mais uma vez obrigado pela visita e continue conosco!
Não se esqueça de comentar e compartilhar o artigo nas redes sociais... 

Seja social. Compartilhe!