Access
 sql >> Base de Dados >  >> RDS >> Access

Abrindo ou vinculando texto ou Excel como fontes de dados no Microsoft Access

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á:
  1. Excel 8.0 :arquivos xls 97-2003
  2. Excel 12.0 :arquivos xlsb
  3. Excel 12.0 Xml :arquivos xlsx
  4. Text :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.