Capítulo 15: Caixas de Combinação Relacionais (ComboBox) e Integridade Visual

🎯 Objetivo da Aula

Nesta aula essencial de usabilidade corporativa, você aprenderá como transformar um sistema tecnicamente correto em uma ferramenta intuitiva e à prova de falhas para os operadores. No laboratório de informática, você aprenderá por que formulários profissionais NUNCA devem exigir que o atendente decore ou digite códigos numéricos frios de clientes ou motoristas. Você dominará a configuração da Caixa de Combinação Relacional (Lookup ComboBox) no Microsoft Access, compreendendo as propriedades RowSource (Origem da Linha com SQL), BoundColumn (Coluna Acoplada) e a técnica das Larguras de Coluna com Dimensão Zero (0cm) para ocultar a Chave Primária aos olhos do usuário.

Ao final desta aula, sua tela de ordens de frete permitirá que o operador escolha clientes e motoristas por nome em listas suspensas elegantes com autopreenchimento, enquanto o banco grava internamente as Chaves Estrangeiras perfeitas.


🏢 Cenário Prático (FastLog S.A.)

Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: No formulário de emissão de fretes que construímos no capítulo anterior, o operador precisava digitar manualmente o ID_Cliente (ex: 42) e o ID_Motorista (ex: 15). Para conseguir trabalhar, o operador imprimiu uma lista em papel com mais de 800 clientes e colou com fita adesiva na parede da guarita. Como a lista estava em ordem numérica e não alfabética, o assistente perdia até 2 minutos procurando o código de cada empresa. Em várias ocasiões, ele errou o número e atribuiu faturas de indústrias químicas para cooperativas de laticínios, gerando atritos comerciais graves.
Sua Missão: Como especialista em usabilidade e engenharia de banco de dados, você substituirá as caixas de texto manuais por Caixas de Combinação Relacionais (ComboBox). Você configurará consultas SQL acopladas que exibem a Razão Social em ordem alfabética, ocultando o código numérico com a técnica da coluna zero (0cm) e travando a seleção com Limitar à Lista: Sim.


🧠 Fundamentos: A Teoria Traduzida

1. A Ilusão Ótica da Chave Acoplada (Bound Column)

Como conciliar a exigência técnica do banco de dados (que exige um número ID_Cliente como chave estrangeira) com a necessidade do ser humano (que pensa em nomes como “Nestlé” ou “Ambev”)?

  • A Caixa de Combinação (ComboBox) do Access é uma ferramenta de lookup brilhante: ela pode carregar múltiplas colunas de uma tabela, mas exibir apenas as colunas amigáveis e gravar internamente a chave primária oculta!
flowchart TD
    subgraph COMBOBOX["🔽 Caixa de Combinação Relacional (cbo_Cliente)"]
        SQL["Origem da Linha (SQL):<br/>SELECT ID_Cliente, Razao_Social, Cidade FROM tbl_Clientes ORDER BY Razao_Social;"]
        
        subgraph PROPRIEDADES["Configuração das Colunas"]
            C1["Coluna 1: ID_Cliente ➔ Largura: 0cm (OCULTA!) 🔑 Grava no Banco"]
            C2["Coluna 2: Razao_Social ➔ Largura: 6cm (VISÍVEL ao Usuário)"]
            C3["Coluna 3: Cidade ➔ Largura: 3cm (VISÍVEL ao Usuário)"]
        end

        SQL --> PROPRIEDADES
    end

    PROPRIEDADES --> OPERADOR["👤 Operador enxerga: 'Supermercados Alvorada S.A.'"]
    PROPRIEDADES --> BANCO[("💾 tbl_OrdensFrete grava: ID_Cliente = 42")]

    style COMBOBOX fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
    style SQL fill:#234e52,stroke:#fff,stroke-width:1px,color:#fff
    style PROPRIEDADES fill:#2c3e50,stroke:#fff,stroke-width:1px,color:#fff
    style OPERADOR fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff
    style BANCO fill:#e67e22,stroke:#fff,stroke-width:2px,color:#fff

2. A Tríade de Propriedades da ComboBox Relacional

  1. Origem da Linha (RowSource): A instrução SQL que alimenta a lista suspensa.
    • Exemplo: SELECT ID_Cliente, Razao_Social, Cidade FROM tbl_Clientes ORDER BY Razao_Social;
  2. Coluna Acoplada (Bound Column): Indica qual coluna da consulta SQL será gravada no campo da tabela destino.
    • Como o ID_Cliente é a primeira coluna do nosso SELECT, configuramos: Coluna Acoplada: 1.
  3. Largura das Colunas (Column Widths): Define os tamanhos de cada coluna separadas por ponto e vírgula.
    • O Truque de Mestre: Ao definir 0cm para a primeira coluna (0cm;6cm;3cm), a chave primária fica 100% invisível ao olho humano, mas perfeitamente conectada ao motor relacional!

3. A Propriedade Limitar à Lista (LimitToList)

  • Quando configurada como Sim, o operador é proibido de digitar qualquer texto que não conste previamente na lista suspensa.
  • Se ele digitar um cliente desconhecido, o Access exibe um alerta de validação, impedindo a criação de dados corrompidos.

📖 Exemplo Guiado: Passo a Passo no Laboratório

Abra o arquivo FastLog_Database.accdb. Vamos transformar o campo de seleção de clientes no formulário mestre.

Passo 1: Abrindo o Formulário Mestre no Modo Design

  1. No Painel de Navegação, clique com o botão direito sobre frm_OrdemFreteMestre ➔ Modo Design.
  2. Localize a caixa de texto atual do campo ID_Cliente.
  3. Clique com o botão direito do mouse diretamente sobre a caixa de texto de ID_Cliente.
  4. No menu de contexto que se abre, vá até a opção: Mudar Para (Change To) ➔ clique em Caixa de Combinação (Combo Box).
  5. O controle foi convertido instantaneamente em uma ComboBox!

🛠️ Prática Obrigatória 1: Configuração das Propriedades Relacionais da ComboBox de Clientes

Você programará a ComboBox para listar os clientes em ordem alfabética com chave oculta.

Passo a Passo no Computador:

  1. Com a nova ComboBox de cliente selecionada, pressione F4 para abrir a Folha de Propriedades.
  2. Na guia Outro:
    • Altere o Nome para: cbo_Cliente.
  3. Na guia Dados:
    • Origem do Controle: Certifique-se de que está vinculado ao campo ID_Cliente (da tabela tbl_OrdensFrete).
    • Tipo de Origem da Linha: Tabela/Consulta.
    • Origem da Linha: Digite o comando SQL:
      1
      
      SELECT tbl_Clientes.ID_Cliente, tbl_Clientes.Razao_Social, tbl_Clientes.Cidade, tbl_Clientes.UF FROM tbl_Clientes ORDER BY tbl_Clientes.Razao_Social;
    • Coluna Acoplada: 1 (grava o ID_Cliente).
    • Limitar à Lista: Sim.
  4. Na guia Formato:
    • Número de Colunas: 4.
    • Cabeçalhos de Coluna: Sim.
    • Largura das Colunas: Digite exatamente:
      1
      
      0cm; 6cm; 3,5cm; 1cm
    • Largura da Lista: 11cm (soma das larguras visíveis).
  5. Alterne para o Modo Formulário para testar:
    • Clique na setinha da ComboBox de cliente.
    • Veja o resultado impressionante: Uma lista com cabeçalhos profissionais se abre, exibindo a Razão Social, Cidade e UF de todos os clientes em ordem alfabética!
    • Ao clicar sobre um cliente (ex: “Ambev S.A.”), o nome é exibido na caixa de texto, mas nos bastidores o Access gravou o ID numérico correto!

✅ Resultado Esperado (Prática 1):

O formulário ganha usabilidade executiva: o operador pesquisa clientes por digitação preditiva do nome, enquanto a integridade relacional do banco grava a chave estrangeira perfeita.


🛠️ Prática Obrigatória 2: Criando a ComboBox Relacional de Motoristas

Agora você aplicará a mesma técnica ergonômica para o campo ID_Motorista.

Passo a Passo no Computador:

  1. Volte ao Modo Design de frm_OrdemFreteMestre.
  2. Clique com o botão direito sobre o campo ID_Motorista ➔ Mudar Para ➔ Caixa de Combinação.
  3. Na Folha de Propriedades (F4):
    • Nome: cbo_Motorista.
    • Guia Dados:
      • Origem da Linha:
        1
        
        SELECT ID_Motorista, Nome_Motorista, Categoria_CNH FROM tbl_Motoristas WHERE Status_Disponivel = True ORDER BY Nome_Motorista;
      • Coluna Acoplada: 1.
      • Limitar à Lista: Sim.
    • Guia Formato:
      • Número de Colunas: 3.
      • Cabeçalhos de Coluna: Sim.
      • Largura das Colunas: 0cm; 5,5cm; 1,5cm.
      • Largura da Lista: 7cm.
  4. Salve o formulário e teste no Modo Formulário.
  5. Observe que apenas os motoristas com status disponível são exibidos na lista suspensa!

✅ Resultado Esperado (Prática 2):

A seleção de motoristas torna-se fluida e segura, impedindo a escala de profissionais inativos ou a digitação de códigos errados.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o formulário e feche o Access.
  2. Nomeie o arquivo: FastLog_BD_Cap15_SeuNome_SeuSobrenome.accdb.
  3. Acesse o Microsoft Teams na sua turma técnica.
  4. Abra a tarefa: “Banco de Dados - Cap 15: ComboBox Relacionais e Ergonomia”.
  5. Anexe o seu arquivo .accdb e conclua o envio clicando em Entregar (Turn In).

💡 Checkpoint de Gestão & TI

Por que esta técnica é indispensável na vida real? Porque quando você entrega um software para a portaria ou faturamento onde o operador precisa consultar “colinhas de papel” para descobrir o ID do cliente ou do motorista, a chance de erro humano é de 1 em cada 12 lançamentos. Com a ComboBox relacional com coluna oculta, o índice de erro cai para zero absoluto, blindando o fluxo de caixa da transportadora.


🔥 Desafio de Fixação: ComboBox de Mercadorias no Subformulário de Itens

No subformulário sub_ItensFrete, o operador ainda precisa digitar o código numérico ID_Produto.

Converta esse campo em uma ComboBox relacional profissional:

  1. Abra sub_ItensFrete no Modo Design.
  2. Clique com o botão direito sobre ID_Produto ➔ Mudar Para ➔ Caixa de Combinação.
  3. Configure as propriedades:
    • Origem da Linha: SELECT ID_Produto, Descricao_Produto, Tipo_Embalagem, Peso_Medio_Unitario_Kg FROM tbl_Produtos ORDER BY Descricao_Produto;
    • Coluna Acoplada: 1.
    • Número de Colunas: 4.
    • Largura das Colunas: 0cm; 5cm; 2,5cm; 2cm.
    • Limitar à Lista: Sim.
  4. Salve e teste o lançamento de múltiplos itens em uma viagem pelo formulário mestre.

🔑 Revelar Gabarito Oficial e Material de Apoio da Aula (Clique para expandir)
💡 Incentivo Pedagógico: Tente resolver as práticas e o desafio de fixação por conta própria antes de abrir o gabarito. Seus erros e tentativas durante o laboratório são a chave para a consolidação real do aprendizado!

Especificação Técnica da ComboBox de Mercadorias (cbo_Produto):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Controle: cbo_Produto (no subformulário sub_ItensFrete)
Origem do Controle: ID_Produto

Propriedades de Dados:
- Tipo de Origem da Linha: Tabela/Consulta
- Origem da Linha: SELECT ID_Produto, Descricao_Produto, Tipo_Embalagem, Peso_Medio_Unitario_Kg FROM tbl_Produtos ORDER BY Descricao_Produto;
- Coluna Acoplada: 1
- Limitar à Lista: Sim

Propriedades de Formato:
- Número de Colunas: 4
- Cabeçalhos de Coluna: Sim
- Largura das Colunas: 0cm; 5cm; 2,5cm; 2cm
- Largura da Lista: 9,5cm
- Linhas da Lista (ListRows): 12

📥 Download dos Scripts desta Aula:
Baixe o arquivo de script Capitulo_15.sql ou o pacote compactado (.zip) com os comandos SQL e esquemas da aula.


📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas reflexivas abaixo com base no conteúdo deste capítulo. Ao concluir, apresente o caderno ao professor para conferência e visto.

  1. Por que exigir que o operador decore e digite códigos numéricos (IDs) em formulários corporativos é considerado uma péssima prática de gestão?
  2. No Cenário Prático da FastLog, qual foi o transtorno financeiro causado pela lista em papel colada na parede da guarita?
  3. O que é uma Caixa de Combinação Relacional (Lookup ComboBox) e como ela conecta o usuário humano ao banco de dados?
  4. Qual é a função da propriedade Origem da Linha (RowSource) de uma ComboBox?
  5. O que representa a propriedade Coluna Acoplada (Bound Column) e por que geralmente a configuramos com o valor 1?
  6. Como a técnica de atribuir largura 0cm à primeira coluna da ComboBox revoluciona a usabilidade do formulário?
  7. Por que devemos incluir a cláusula ORDER BY na instrução SQL que alimenta uma ComboBox?
  8. Qual é a importância da propriedade Limitar à Lista (LimitToList: Sim) para a integridade dos dados?
  9. Na Prática Obrigatória 2, qual cláusula SQL foi utilizada para exibir apenas os motoristas que estavam efetivamente disponíveis para viagem?
  10. No Desafio de Fixação, qual é a vantagem para o faturista de visualizar a descrição, a embalagem e o peso médio na mesma lista suspensa ao escolher um produto?