Abrindo ou vinculando texto ou Excel como fontes de dados no Microsoft Access
O Access é uma ferramenta fenomenal para trabalhar com muitas fontes de dados. Você pode saber há muito tempo que pode importar ou exportar dados facilmente em uma ampla variedade de formatos. No entanto, tivemos um cenário em que precisávamos processar dados de fontes de dados externas. O processamento é executado com frequência, portanto, a importação de dados sobrecarregaria o arquivo de front-end rapidamente. Além disso, nessa situação, criar uma segunda cópia do arquivo do Access como um banco de dados temporário para evitar o inchaço não era uma opção viável. Que escolhas tivemos? Foi aí que notamos uma escassez de informações sobre abertura ou link para fontes de dados não relacionais. Então, vamos nos aprofundar nesse assunto.
Esta série de blogs visa preencher uma lacuna na documentação da Microsoft sobre como abrir ou vincular a texto ou Excel como fonte de dados em aplicativos do Access. Connectionstrings.com e outros sites fornecem algumas migalhas de pão. Você também pode descobrir alguns dos comportamentos usando os assistentes do Access e examinando os objetos depois. No entanto, secundar-adivinhando não é muito útil. Portanto, esta série de artigos discutirá sobre como usar arquivos Excel e Texto como fontes de dados sem necessariamente importar ou exportar os dados.
Observe que a série não seria possível sem a ajuda de Dan Haught e Jim Ferguson, coautores do Guia do Programador do Mecanismo de Banco de Dados Microsoft Jet. Mesmo que o livro esteja esgotado há muito tempo, ainda é um livro valioso se você trabalha muito com DAO.
Acesso e fontes de dados não relacionais
O Access sempre apoiou o uso do Indexed Sequential Access Method (ISAM) como uma fonte de dados potencial, o que permite importar, vincular ou exportar para fontes de dados não relacionais, como arquivos de texto ou planilhas do Excel e até mesmo outros formatos de arquivo, como Exchange, dBASE ou FoxPro. O DAO torna isso possível porque possui os drivers ISAM que podem trabalhar com esses formatos. No entanto, vou me concentrar em arquivos de texto e planilhas do Excel, pois são fontes mais comuns nas quais precisamos do Access para trabalhar. Se tudo o que você já fez foi importar dados usando a guia Dados Externos via Access, pode parecer mágico, mas na realidade, todos os recursos do Access estão disponíveis para nós como programadores no nível de DAO.
Então, vamos esquecer que os magos existem. Vamos esquecer os ícones brilhantes na faixa de opções. Vamos esquecer que há tabelas vinculadas. Vamos apenas usar o código VBA para trabalhar com fontes de dados, do nada. Nós podemos? Absolutamente. Primeiro, veremos a diferença entre vincular e abrir uma fonte de dados.
Vinculação x abertura
Para ajudar com a terminologia, precisamos fazer uma distinção entre vincular vs. abertura . Vincular significa que criamos uma tabela vinculada que agora é uma “tabela” do Access que podemos usar como qualquer outra tabela do Access. Como tal, é um objeto permanente definido no aplicativo Access. Em contraste, a abertura é quando acessamos a fonte de dados diretamente usando o
OpenDatabase
do DAO método. Por sua natureza, a abertura de uma fonte de dados geralmente é feita via código VBA, como você verá em breve. Configurando as amostras e o código
Como a série trata da compreensão dos detalhes básicos de como o Access interage com essas fontes de dados, primeiro nos concentraremos na abertura em vez de vincular aqui. Então, como abrimos uma planilha do Excel? Certamente, não é um banco de dados? Vamos configurar um exemplo mínimo para começar. Em uma pasta,
C:\Links
, criaremos uma planilha do Excel e um arquivo de banco de dados do Access, chamado Products.xlsx
e Sample.accdb
, respectivamente:O Products.xlsx é uma planilha simples com apenas uma planilha com este conteúdo:
Com isso, vamos adicionar o código VBA no
Sample.accdb
. Em um módulo padrão:Public Sub OpenExcel() Dim db As DAO.Database Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx") Dim tdf As DAO.TableDef For Each tdf In db.TableDefs Debug.Print tdf.Name Dim fld As DAO.Field For Each fld In tdf.Fields Debug.Print fld.Name, Next Debug.Print Dim rs As DAO.Recordset Set rs = tdf.OpenRecordset Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next Debug.Print rs.MoveNext Loop Next End Sub
Se executarmos o código, devemos obter a seguinte saída em nossa janela imediata:
Products Count Apples 3 Bananas 5 Figs 8
Portanto, mesmo que o Excel não seja um “banco de dados” (e se você estiver usando o Excel como banco de dados, que vergonha 😉), ainda podemos fingir que é um “banco de dados” e iterar através de suas “tabelas” e “registros” usando objetos DAO familiares. Toda a mágica vem desta string de conexão:
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx
Mas não precisa ser mágico. A série irá dissecar as partes das cadeias de conexão para drivers de arquivos de texto e Excel. Então, vamos começar comparando a string de conexão ODBC com a qual você talvez esteja mais familiarizado.
Tipos de fonte de dados
Se você vinculou a fontes de dados ODBC, provavelmente notou que as strings de conexão ODBC geralmente se parecem com isto:
ODBC;DRIVER=...;SERVER=...;DATABASE=...;
Perguntou por que sempre começou com
ODBC
? Essa primeira parte é o que o DAO usa para identificar o tipo de fonte. No entanto, como o Excel não é um banco de dados ODBC, temos que usar o Excel 12.0 Xml
para indicar que o DAO precisa usar um driver do Excel específico. O restante da sintaxe da string de conexão é influenciado pelo driver que estamos usando na primeira parte da string de conexão. Aqui está uma lista parcial de possíveis tipos de fonte de dados que o MS Access reconhecerá:
Excel 8.0
:arquivos xls 97-2003Excel 12.0
:arquivos xlsbExcel 12.0 Xml
:arquivos xlsxText
:Qualquer arquivo de texto
Existem mais fontes de dados, incluindo SharePoint, Exchange ou FoxPro, mas não vou abordá-las. Mesmo assim, demonstra que o Access é capaz de trabalhar com essas fontes como um banco de dados e que pode nos permitir usar o DAO para ler o conteúdo. Observe que, quando usamos fontes de dados não relacionais, nem todas as operações podem ser totalmente compatíveis. Por exemplo, você pode não ter permissão para editar uma linha existente, embora possa inserir uma linha.
No entanto, um desafio ao abrir ou vincular a uma fonte de dados significa que você não pode simplesmente importar os dados e depois editar o esquema para atender às suas necessidades. Portanto, você pode descobrir que o esquema padrão obtido durante a vinculação não será o que você deseja. Por esse motivo, uma compreensão aprofundada da cadeia de conexão será importante. Portanto, você aprenderá mais sobre os detalhes das cadeias de conexão para arquivos de texto e Excel nos próximos artigos.
Conclusões
Você viu que como alternativa para importar os dados externos, podemos optar por vincular ou até mesmo abrir uma fonte de dados externa usando o DAO. A capacidade de vincular ou abrir uma fonte de dados externa é amplamente subutilizada. No entanto, a capacidade de vincular ou abrir não deve ser descartada, pois isso pode abrir novos cenários, como evitar o inchaço como efeito da importação, especialmente em um ambiente bloqueado. No próximo artigo, discutirei os diferentes parâmetros usados pelo driver do Excel para construir uma string de conexão válida. Nos artigos a seguir, examinarei o driver do arquivo de texto e os parâmetros de conexão. No artigo final, vamos colocar tudo junto.