Como criar bases de dados em Access com SQL e VBA
Dicas e explicações para desenvolver Bases de Dados em Access, para uso domestico ou profissional, usando SQL e VBA.
sexta-feira, 20 de julho de 2012
Formulário com Filtragem
Por vezes é necessário introduzir dados num formulário, onde existem campos cuja origem de dados é uma lista grande, sendo necessário efectuar filtragem nos dados de origem de acordo com outro campo já inserido.
Vamos a um exemplo:
Utilizando a BD das freguesias vamos supor que queremos registar uma lista de escolas, sendo uma das informações o Concelho e a Freguesia.
1- Na BD Freguesias criar uma tabela Escolas com os campos ID (Numeração Automática), Nome (Texto), Concelho (Texto),Freguesia (Texto).
Embora cada freguesia tenho um concelho associado, neste exemplo, vou incluir na tabela Escolas o campo Concelho. Este campo vai ocupar espaço redundante, mas ajuda a clarificar.
2 - Criar as ligações conforme o exemplo das Freguesias. Uma ligação entre Concelho e codConcelho da tabela Concelhos e outra entre Freguesia e codFreguesia da tabela Freguesias.
3- Criar um formulário usando o assistente, para a tabela Escolas e em vista Tabela (formulário contínuo). Para alterar o formulário tem mudar para vista de estrutura.
4- Se foi colocada a origem de dados correctamente nos campos Freguesia e Concelho, no formulários irá parecer estes campos ligados a comboboxes. Caso contrário mudar para combobox, usando o botão direito do rato.
Na combo do Concelho a origem de dados deve ser SELECT codconcelho,concelho FROM Concelhos ORDER BY concelho, com coluna pendente 1, número de colunas 2 e largura das colunas 0.
Para a combo da Freguesia seguir o mesmo método com a origem de dados SELECT codfreguesia,freguesia FROM Freguesias WHERE codconcelho=concelho ORDER BY freguesia.
Mude para a vista formulário para visualizar e pode inserir e editar registos.
Embora assim funcione, não tem o efeito desejado, porque precisa actualizar o registo para que a lista de freguesias seja actualizada.
Usando uma linha de código em VBA é possível fazer a lista de freguesias actualizar sem ter de actualizar o registo.
Com a combo Concelho seleccionada vá às propriedades no separador Evento e no evento ao fazer clique, escolha [Procedimento de Evento] e clique nos (...). Irá parecer o editor VBA com o cursor no procedimento Concelho_Click. Insira a seguinte linha de código:
Freguesia.RowSource = "SELECT codfreguesia,freguesia FROM Freguesias WHERE codconcelho='" & Nz(Concelho, "") & "' ORDER BY freguesia"
O procedimento todo, depois de fazder uma quebra na linha para melhor visualizar, fica assim:
Private Sub Concelho_Click()
Freguesia.RowSource = "SELECT codfreguesia,freguesia FROM Freguesias " _
& "WHERE codconcelho='" & Nz(Concelho, "") & "' ORDER BY freguesia"
End Sub
Mude para vista formulário e teste.
Este modelo está disponível em Escolas-01, onde já foi incluído o distrito que faz a filtragem no concelho.
Qualquer dúvida, deixe um comentário.
Subscrever:
Mensagens (Atom)