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:#fff2. A Tríade de Propriedades da ComboBox Relacional
- 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;
- Exemplo:
- 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 nossoSELECT, configuramos:Coluna Acoplada: 1.
- Como o
- Largura das Colunas (Column Widths): Define os tamanhos de cada coluna separadas por ponto e vírgula.
- O Truque de Mestre: Ao definir
0cmpara a primeira coluna (0cm;6cm;3cm), a chave primária fica 100% invisível ao olho humano, mas perfeitamente conectada ao motor relacional!
- O Truque de Mestre: Ao definir
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
- No Painel de Navegação, clique com o botão direito sobre
frm_OrdemFreteMestre➔ Modo Design. - Localize a caixa de texto atual do campo
ID_Cliente. - Clique com o botão direito do mouse diretamente sobre a caixa de texto de
ID_Cliente. - No menu de contexto que se abre, vá até a opção: Mudar Para (Change To) ➔ clique em Caixa de Combinação (Combo Box).
- 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:
- Com a nova ComboBox de cliente selecionada, pressione
F4para abrir a Folha de Propriedades. - Na guia Outro:
- Altere o Nome para:
cbo_Cliente.
- Altere o Nome para:
- Na guia Dados:
- Origem do Controle: Certifique-se de que está vinculado ao campo
ID_Cliente(da tabelatbl_OrdensFrete). - Tipo de Origem da Linha: Tabela/Consulta.
- Origem da Linha: Digite o comando SQL:
- Coluna Acoplada:
1(grava o ID_Cliente). - Limitar à Lista: Sim.
- Origem do Controle: Certifique-se de que está vinculado ao campo
- Na guia Formato:
- Número de Colunas:
4. - Cabeçalhos de Coluna: Sim.
- Largura das Colunas: Digite exatamente:
- Largura da Lista:
11cm(soma das larguras visíveis).
- Número de Colunas:
- 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:
- Volte ao Modo Design de
frm_OrdemFreteMestre. - Clique com o botão direito sobre o campo
ID_Motorista➔ Mudar Para ➔ Caixa de Combinação. - Na Folha de Propriedades (
F4):- Nome:
cbo_Motorista. - Guia Dados:
- Origem da Linha:
- 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.
- Número de Colunas:
- Nome:
- Salve o formulário e teste no Modo Formulário.
- 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)
- Salve o formulário e feche o Access.
- Nomeie o arquivo:
FastLog_BD_Cap15_SeuNome_SeuSobrenome.accdb. - Acesse o Microsoft Teams na sua turma técnica.
- Abra a tarefa: “Banco de Dados - Cap 15: ComboBox Relacionais e Ergonomia”.
- Anexe o seu arquivo
.accdbe 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:
- Abra
sub_ItensFreteno Modo Design. - Clique com o botão direito sobre
ID_Produto➔ Mudar Para ➔ Caixa de Combinação. - 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.
- Origem da Linha:
- Salve e teste o lançamento de múltiplos itens em uma viagem pelo formulário mestre.
📝 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.
- 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?
- No Cenário Prático da FastLog, qual foi o transtorno financeiro causado pela lista em papel colada na parede da guarita?
- O que é uma Caixa de Combinação Relacional (Lookup ComboBox) e como ela conecta o usuário humano ao banco de dados?
- Qual é a função da propriedade Origem da Linha (RowSource) de uma ComboBox?
- O que representa a propriedade Coluna Acoplada (Bound Column) e por que geralmente a configuramos com o valor
1? - Como a técnica de atribuir largura
0cmà primeira coluna da ComboBox revoluciona a usabilidade do formulário? - Por que devemos incluir a cláusula
ORDER BYna instrução SQL que alimenta uma ComboBox? - Qual é a importância da propriedade Limitar à Lista (LimitToList: Sim) para a integridade dos dados?
- Na Prática Obrigatória 2, qual cláusula SQL foi utilizada para exibir apenas os motoristas que estavam efetivamente disponíveis para viagem?
- 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?