NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosSérie "Como Fazer": Modelagem de Dados › Lições : 05
Quer receber novidades e e-books gratuitos?
« Anterior Δ Página principal ¤ Índice Próxima »
Modelagem de dados com MS Access
Autor: Robert Friedrick Martim
Lição 004 - Criando campos no estilo ComboBox

Uma grande vantagem no que diz respeito a criação de campos e tabelas é que determinados campos podem receber como argumento detalhes de um campo de uma outra tabela. Observe a figura abaixo:

Figura 4‑1 Campo no estilo combobox (caixa de combinação)

Neste exemplo, ao invés de digitarmos o nome da cidade toda vez que um novo registro é adicionado o que fazemos é simplesmente selecionar a cidade em uma caixa de combinação (combobox).

No próximo tópico veremos como criar tais listas em tabelas.

Combobox com valores digitados

Vamos iniciar com um exemplo de lista digitada. Neste exemplo, a lista não é obtida de uma outra tabela, pois as opções são poucas e dificilmente crescerão além dos itens disponíveis. Exemplos de listas que não crescem são: a) sexo (masculino/feminino); b) Tipo de Pessoa (Física/Jurídica); c) Estado civil; etc.

Para listas que crescem constantemente, veja exemplo do próximo tópico.

Para criar tal exemplo siga os passos abaixo:

  • Adicione uma nova tabela;
  • Adicione o campo de numeração automática
  • Adicione um segundo campo do tipo texto
  • Selecione a aba “Pesquisa” e modifique de “Caixa de Texto” para “Caixa de Combinação”
  • Modifique a propriedade “Tipo de origem da Linha” para “Lista de Valores”
  • Na propriedade “Origem da Linha” digite os valores que deseja e separe-os com ponto-e-vírgula;

Figura 4‑2 Definindo a origem da linha

Salve e feche a janela de design de tabela. Abra a tabela na janela do banco de dados e experimente com a nova criação (coloque as opções na ordem que desejar):

Figura 4‑3 Selecionando uma opção da combobox

A grande vantagem da utilização deste método é que sabemos que as informações serão entradas corretamente e serão padronizadas. Sendo assim, não há espaço para erros de digitação bastando apenas selecionar o item desejado.

Combobox com valores consultados

O exemplo anterior é “OK”, porém há cenários onde a lista cresce sempre. Nós simplesmente não temos como prever de antemão o quanto tal lista crescerá. Pegue, por exemplo, uma lista de cidades. Embora o número de cidades brasileiras seja limitado é inviável digitar tudo de uma vez só, ao invés disso digitamos as principais cidades e aquelas mais obscuras ficam para o momento que surgir a necessidade.

Para este exemplo, vamos criar duas tabelas:

  • tblCidades à Tabela para armazenar as cidades. Os campos para esta tabela são mostrados abaixo:

Figura 4‑4 Campos para a tabela tblCidades

  • tblUF à Tabela para armazenar as Unidades Federativas

Figura 4‑5 Campos para a tabela tblUF

Agora que temos as duas tabelas prontas, vejamos como modificar o campo IDUF da tblCidades. Abra a tabela tblCidades e selecione o campo IDUF.

Figura 4‑6 Definição de consulta para caixa de combinação

Antes de modificarmos as propriedades “Origem da Linha”, modifique as seguintes propriedades:

  • Exibir controle à Se ainda for caixa de texto, modifique para “Caixa de Combinação”;
  • Tipo de Origem da Linha à Modifique para “Tabela/Consulta”;
  • Coluna acoplada à Determine como sendo 1 (primeira coluna). Isso porque a primeira coluna será numérica para o nosso relacionamento, mas desejamos visualizar o nome ao invés do número;
  • Número de colunas à Determine como sendo 2. A primeira coluna é para armazenar o número e a segunda para armazenar o texto;
  • Larguras das colunas à Determine como sendo 0cm; 5cm. O primeiro valor é a largura da coluna 1 e o segundo valor é a largura da coluna 2. Deste modo, o valor numérico ficará oculto.

Clique sobre as reticências para abrir a caixa de construção de consultas:

Figura 4‑7 Campos para a tabela tblCidades

Com o construtor de consultas aberto, adicione a tabela tblUF à área reservada às tabelas. Para a primeira coluna selecione o campo IDUF e para a segunda coluna selecione o campo UF:

Figura 4‑8 Construtor de consultas

Caso queira, na linha “Classificação” escolha qual campo (IDUF ou UF) deve ser classificado e que tipo de ordem devem aparecer. Caso nenhuma ordem seja especificada a ordem será a de entrada dos dados.

Feche o construtor e a instrução SQL será adicionada como valor para a propriedade “Origem da Linha”:

SELECT tblUF.IDUF, tblUF.UF FROM tblUF ORDER BY tblUF.UF;

Figura 4‑9 Selecionando UF na tabela tblCidades

Com a consulta pronta podemos abrir a tabela tblCidades para verificar como funciona a caixa de combinação.

Adicionando itens à lista

Como o nosso banco de dados certamente terá uma interface gráfica compreendida por formulários, o mínimo que podemos esperar é que durante a inserção de um novo registro um item da lista esteja faltando.

Em um cenário como este nós não desejamos que o usuário feche tudo para abrir um outro formulário para inserir o item que falta para posteriormente retornar ao formulário onde trabalhava para continuar onde havia parado:

Figura 4‑10 Cidade não se encontra na lista

Na figura acima, nós não possuímos a cidade “Santa Maria” e seria perda de tempo parar este processo, abrir o formulário para inserção da nova cidade, fechar este formulário e finalmente reabrir o formulário de inserção de clientes.

Ao invés disso, podemos utilizar VBA para controlar tal inserção. Siga os passos abaixo para completar esta tarefa:

  • Abra o formulário de clientes em modo de design;
  • Selecione a caixa de combinação para a cidade;
  • Selecione a tabulação (guia) de eventos:
    • Para o evento “Não está na lista”, adicione o seguinte código:

Private Sub IDCidade_NotInList(NewData As String, _

       Response As Integer)

    MsgBox "Item não se encontra na lista. Duplo-clique " _

           & "sobre este campo para adicionar um item à lista.", _
           vbExclamation, "Item não está na lista..."

    Response = acDataErrContinue

End Sub

    • Para o evento “Duplo clique”, adicione o seguinte código:

Private Sub IDCidade_DblClick(Cancel As Integer)

 

    On Error GoTo Err_Handler

    Dim lngIDCidade As Long

 

    If IsNull(Me![IDCidade]) Then

        Me![IDCidade].Text = ""

    Else

        lngIDCidade = Me![IDCidade]

       Me![IDCidade] = Null

    End If

    DoCmd.OpenForm "tblCidades", , , , , acDialog, "GotoNew"

    Me![IDCidade].Requery

    If lngIDCidade <> 0 Then Me![IDCidade] = lngIDCidade

 

Sair:

    Exit Sub

 

Err_Handler:

    MsgBox Err.Description

    Resume Sair

 

End Sub

  • Salve e feche este formulário;
  • Abra o formulário de inserção de cidades onde o seguinte código deve ser inserido:

Private Sub Form_Load()

    If Me.OpenArgs = "GotoNew" And Not IsNull(Me![IDCidade]) Then

        DoCmd.DoMenuItem acFormBar, 3, 0, , acMenuVer70

    End If

End Sub

  • Salve e feche este formulário.

Com isso feito, podemos agora adicionar novas cidades à tabela de cidades quando trabalhamos com o formulário de clientes sem necessidade de reiniciar todo os processo.

Caso o usuário tente inserir um item que não se encontra na lista a mensagem do primeiro código será mostrada:

Figura 4‑11 Mensagem mostrada quando item não se encontra na lista

Quando damos um duplo-clique sobre o campo o formulário de inserção de cidades é aberto sobre o formulário de inserção de clientes como mostra figura:

Figura 4‑12 Adicionando uma nova cidade à lista

Selecione a UF a qual a cidade pertence e digite o nome da cidade. Clique no “X” para fechar o formulário. Quando retornamos ao formulário de inserção de clientes ocorrerá um “reconsulta” à tabela de cidades pela campo IDCidade (veja o método Requery no código anterior) e os valores contidos na combobox serão atualizados para mostrar todos as cidades da tabela:

Figura 4‑13 Lista de cidades atualizada

Últimas palavras sobre este tópico

O leitor é capaz de identificar algum “erro” nesta modelagem de dados?

Coloco “erro” entre aspas porque não é exatamente um erro, mas uma duplicação desnecessária de informações. Duplicação de informação é algo normal, mas que deve ser evitado.

A idéia principal de termos uma tabela para UF é que, fazendo assim, evitamos a repetição da UF na tabela de cidades. Porém, na tabela de clientes eu também adiciono UF. Note que está adição, embora completamente viável, é desnecessária. Observe o relacionamento (relacionamentos são discutidos no próximo tópico) das tabelas:

Figura 4‑14 Relacionamento entre tabelas

O que isso nos diz? O relacionamento acima nos diz que para cada UF nós podemos ter várias cidades (relacionamento um-para-muitos) e que cada cidade pode ter vários clientes (novamente um relacionamento um-para-muitos).

Como existe uma “cadeia” entre as três tabelas e o cliente tem um relacionamento com a tabela de cidades, o cliente está indiretamente relacionado à UF. Observe a figura na próxima página:

Figura 4‑15 Expansão das tabelas relacionadas

Como a figura acima mostra, ao expandirmos a tabela de UF e de cidades obtemos os clientes de cada cidade e, consequentemente, obtemos os clientes de cada UF. Portanto, o campo IDUF que o leitor vê na tabela de cliente logo ao lado de seu nome é irrelevante.

Poderíamos criar um relacionamento deste campo com a UF? Sim, poderíamos. Não obstante, neste cenário a relação seria direta entre as duas tabelas e perderíamos a parte intermediária referente à cidade.

Vejamos então o próximo tópico a questão de relacionamento de dados para evitar duplicação desnecessária de dados.

« Anterior Δ Página principal ¤ Índice Próxima »

você conhece a universidade do access?

Universidade do Access - Curso Completo de Access
com tudo para você dominar o Access - do Básico ao
Avançado - até a Criação de Sistemas Profissionais
Completos - Passo a Passo - Tela a Tela

Capa da Universidade do Access

Aplica-se ao Access 2019, 2016, 2013 e 2010!

13 Cursos - 574 Vídeo-Aulas - 63:32 horas

Para todos os detalhes, acesse:

https://juliobattisti.com.br/universidade-do-access.asp

Quer receber novidades e e-books gratuitos?

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2021 ®

[LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI