Capítulo 19: Conexão Direta com Banco de Dados Relacional via ADODB e SQL
🎯 Objetivo da Aula
Nesta aula, você aprenderá a transformar o Microsoft Excel em uma poderosa interface de consulta para bancos de dados corporativos utilizando a biblioteca ADODB (ActiveX Data Objects Database) e a linguagem SQL (Structured Query Language). Você aprenderá a estabelecer uma conexão ativa com arquivos de banco de dados Access (ADODB.Connection), executar instruções SELECT filtradas, extrair cabeçalhos dinâmicos dos metadados e despejar milhares de registros na planilha com o método de alta performance CopyFromRecordset.
Ao final desta aula, você terá construído o conector analítico direto entre o Excel e o banco de dados relacional SIG_FastLog_Dados.accdb.
🏢 Cenário Prático (FastLog S.A.)
Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: A equipe de manutenção mecânica e suprimentos controla o estoque de peças de reposição de carretas (filtros, lonas de freio, baterias e pneus) em um banco de dados relacional centralizado do Access (SIG_FastLog_Dados.accdb), criado pelo time de TI. Para saber quais peças estavam em nível crítico de estoque, o comprador precisava pedir para o analista de banco abrir o Access, executar uma consulta manual, exportar um arquivo e enviar por e-mail. Esse processo levava até 4 horas, atrasando a compra de peças e deixando caminhões parados no pátio esperando manutenção.
Sua Missão: Desenvolver o módulo em VBA ConsultarEstoqueCriticoADODB, que se conecta diretamente ao banco de dados relacional em segundo plano, executa uma instrução SQL com filtro de estoque mínimo e descarrega a relação de peças a serem compradas na planilha em 0,1 segundo.
🧠 Fundamentos: A Teoria Traduzida
1. A Arquitetura ADODB no Excel
O ADODB é o padrão corporativo da Microsoft para comunicação entre aplicações e bancos de dados relacionais (Access, SQL Server, Oracle, PostgreSQL). Ele atua através de dois objetos primordiais:
flowchart LR
EXCEL["📊 Excel (VBA)"] <--> CONN["🔌 ADODB.Connection<br/>(Canal de Comunicação Aberto)"]
CONN <--> DB[("🗄️ Banco de Dados Relacional<br/>SIG_FastLog_Dados.accdb")]
DB -- "Executa Consulta SQL<br/>SELECT * FROM Pecas..." --> RS["📑 ADODB.Recordset<br/>(Tabela Virtual em Memória)"]
RS -- "Range.CopyFromRecordset (0,05 s)" --> EXCEL
style EXCEL fill:#217346,stroke:#fff,stroke-width:2px,color:#fff
style CONN fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
style DB fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style RS fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff2. A Cadeia de Conexão (Connection String)
Para o Excel saber onde o banco de dados está e qual driver utilizar, passamos uma Connection String. Para bancos de dados Microsoft Access contemporâneos (.accdb), utilizamos o provedor oficial Microsoft.ACE.OLEDB.12.0 (ou 16.0):
3. O Método Ultrarrápido CopyFromRecordset
O Excel possui um método embutido no objeto Range desenvolvido exclusivamente para o ADODB. Em vez de percorrer o banco com um laço linha a linha, o comando:
despeja todos os registros retornados pela consulta SQL diretamente nas células com velocidade de barramento de memória!
📖 Exemplo Guiado: Passo a Passo no Laboratório
No computador do laboratório, acesse o VBE com Alt + F11.
Passo 1: Inserção do Módulo de Banco de Dados
- No menu superior, clique em Inserir ➔ Módulo.
- Na janela de propriedades (
F4), renomeie o módulo para:modConexaoADODB. - Confirme a presença de
Option Explicit.
🛠️ Prática Obrigatória 1: Conexão com Access e Despejo via CopyFromRecordset
Construiremos a rotina oficial que se conecta ao banco de dados e executa uma consulta SQL filtrando peças abaixo do estoque mínimo de segurança.
Passo a Passo no Computador:
- No módulo
modConexaoADODB, digite o seguinte código completo:
✅ Resultado Esperado (Prática 1):
A macro conecta-se ao banco relacional do Access, extrai os nomes das colunas de forma automática e descarrega a tabela de peças críticas na planilha em milissegundos.
🛠️ Prática Obrigatória 2: Atualização Direta no Banco via Instrução SQL UPDATE
Agora realizaremos a operação de escrita: enviaremos um comando SQL UPDATE direto para o banco de dados através da conexão ADODB, atualizando o estoque de uma peça sem precisar abrir o Access.
Passo a Passo no Computador:
- No mesmo módulo, insira o procedimento de atualização transacional:
- Execute a macro
AtualizarEstoqueNoBanco:- Digite o código de uma peça e informe a quantidade reposta.
- O banco Access é atualizado diretamente e a planilha reflete a nova situação imediatamente!
✅ Resultado Esperado (Prática 2):
O Excel atua como uma aplicação executiva completa de consulta e atualização de registros relacionais.
📤 Instruções de Entrega (Microsoft Teams)
- Salve sua pasta de trabalho corporativa (
.xlsm). - Nomeie o arquivo:
Atividade_19_VBA_SeuNome_SeuSobrenome.xlsm. - Acesse o Microsoft Teams na sala da disciplina.
- Abra a tarefa: “VBA - Cap 19: Conexão ADODB e Banco de Dados SQL”.
- Anexe a pasta de trabalho e entregue.
💡 Checkpoint de Gestão & TI
A separação entre a interface de trabalho (Front-End) no Excel e a base de persistência (Back-End) em um banco relacional como Access ou SQL Server é a melhor arquitetura de TI corporativa. Planilhas compartilhadas na rede tendem a corromper quando mais de 5 pessoas gravam simultaneamente. Ao delegar o armazenamento a um banco relacional via ADODB, a integridade referencial e o controle de concorrência ficam sob a guarda do motor de banco de dados, enquanto os gestores continuam desfrutando do conforto analítico do Excel.
🔥 Desafio de Fixação: Consulta SQL Dinâmica com Filtro de Categoria
Adicione ao formulário ou célula um filtro por categoria:
- Permita que o operador digite a categoria desejada na célula H1 (ex:
"Filtros","Freios"ou"Pneus"). - Se a célula H1 estiver preenchida, altere dinamicamente a instrução SQL para incluir a cláusula:
- Teste filtrando apenas pneus abaixo do estoque mínimo!
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que você estudou neste capítulo. Ao concluir, apresente o caderno ao professor para visto.
- O que representa a sigla ADODB e para que ela serve no desenvolvimento com VBA?
- Explique a diferença entre o objeto
ADODB.Connectione o objetoADODB.Recordset. - O que é uma Connection String e qual provedor OLEDB é utilizado para conectar a bancos de dados Microsoft Access contemporâneos (
.accdb)? - Qual é o comando da linguagem SQL utilizado para realizar consultas e filtros de registros em tabelas?
- O que significa a cláusula
WHERE QtdEstoque <= EstoqueMinimodentro de uma instrução SQL? - Por que o método
Range("A2").CopyFromRecordset rsé muito superior a ler o banco com um laçoWhile Not rs.EOF? - Como extraímos automaticamente os nomes das colunas de uma consulta SQL para preencher o cabeçalho da planilha?
- Qual comando SQL é utilizado para atualizar dados existentes dentro de uma tabela relacional?
- O que a propriedade
rs.EOFindica no ciclo de vida de um Recordset? - Quais são as vantagens de segurança e integridade de dados ao separar o Front-End no Excel do Back-End no Access?