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

Parâmetros de cadeia de conexão para fontes de dados do Excel

Parâmetros de string de conexão para fontes de dados do Excel




No artigo anterior, discuti como podemos tratar arquivos de texto e Excel como se fossem um banco de dados usando DAO e como podemos abri-los sem vincular. Como eles não usam drivers ODBC, sua cadeia de conexão será formatada de forma bem diferente do que você pode estar acostumado a ver para uma cadeia de conexão ODBC. Há uma escassez de documentação sobre os parâmetros da cadeia de conexão do Excel. Este é o melhor esforço para cobrir algumas das lacunas e discutir as ramificações dos parâmetros.

Parâmetros de string de conexão do Excel


Embora tenhamos 3 “tipos” de fonte de dados diferentes:
  1. Excel 8.0 :arquivos xls 97-2003
  2. Excel 12.0 :arquivos xlsb
  3. Excel 12.0 Xml :arquivos xlsx

Todos eles usam os mesmos parâmetros.

Segue a lista de parâmetros:

HDR parâmetro:linha de cabeçalho


YES :A primeira linha é o cabeçalho e deve se tornar os nomes das colunas para a “tabela”/”conjunto de registros”
NO :A primeira linha não é tratada de forma diferente e é apenas um dado. Todos os nomes de coluna serão nomeados “FN” onde “N” é um número começando com 1

IMEX parâmetro:comportamento de importação/exportação


Isso rege como os tipos de dados da coluna devem ser definidos, com base no conteúdo:
1 :se a coluna contiver tipos de dados diferentes, trate-a como uma string. Caso contrário, corresponda a coluna ao melhor tipo de dados.
2 :sempre corresponda a coluna a um determinado tipo de dados com base na amostra. Isso pode causar um erro na leitura quando lemos uma linha que contém dados que não correspondem ao tipo de dados esperado.

ACCDB parâmetro:indica que o Access está usando o formato de arquivo ACCDB?


Por padrão, sempre é definido ACCDB=YES em um formato de arquivo accdb. No entanto, omitir ou defini-lo como NÃO parece não fazer nada. É um pouco de mistério. Se alguém puder compartilhar qual efeito esse parâmetro, poste em comentário e atualizarei o blog.

BANCO DE DADOS:Caminho para a pasta de trabalho do Excel


O parâmetro deve conter um caminho totalmente qualificado, incluindo o nome da pasta de trabalho.

String de conexão mínima de trabalho


Observe que o DATABASE é o único parâmetro obrigatório além da palavra-chave de origem do tipo de dados. Portanto, uma string de conexão mínima de trabalho pode ser:

Excel 8.0;DATABASE=C:\Links\Products.xls

Especificando folha ou intervalo na string de conexão


No exemplo anterior, você viu que uma planilha representava um arquivo “DAO.TableDef “. No entanto, planilhas não são a única coisa que pode ser um “Tabledef “. Se a planilha do Excel contiver um intervalo nomeado, o intervalo nomeado será relatado como um “Tabledef " também. Além disso, podemos “consultar” um bloco arbitrário na planilha usando o endereço da célula. Por exemplo:
Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
Set rs = db.OpenRecordsset("Sheet$1A1:A3")

Debug.Print rs.Name, rs.Fields.Count

É importante observar que os endereços das células não podem exceder o intervalo usado da planilha. Por exemplo, o Products.xlsx só tem conteúdo em A1:B3, o que significa que se você abrir um conjunto de registros usando Sheet1$A1:D5, você ainda obterá apenas 2 para contagem de campos e 3 para contagem de registros. As colunas/linhas em branco extras são simplesmente ignoradas. Por outro lado, se você sujou uma célula em algum lugar fora do A1:B3 , o UsedRange da planilha será agora maior e a consulta incluirá colunas e linhas em branco.

Portanto, esses são nomes válidos para usar em uma consulta em um “banco de dados” do Excel:
  1. Sheet1$ – Todo o intervalo usado de uma planilha.
  2. Sheet1$A1:B4 – Apenas 2 colunas e 3 linhas (sem contar cabeçalho), desde que o conteúdo seja preenchido. Caso contrário, as colunas ou linhas podem ser menores do que o solicitado.
  3. ProductsRange – o intervalo nomeado com esse nome.

Acho muito melhor usar intervalos nomeados onde for prático, pois isso garante que você não esteja codificando os endereços em seu código, especialmente se o intervalo for movido devido ao usuário inserir novas colunas ou linhas, mas não alterando o conteúdo do intervalo nomeado . No entanto, nem sempre é prático, especialmente se você estiver recebendo planilhas de terceiros e, portanto, não tiver controle sobre seu conteúdo ou formatos. Nesse caso, escrever uma consulta SQL também pode funcionar.

Consultando a fonte de dados do Excel


Suponha que não podemos controlar o formato e não queremos confiar no endereço absoluto, embora estejamos confiantes de que certas colunas e linhas estarão de fato presentes. Nessa situação, o melhor a fazer é consultar. Aqui está um exemplo que seleciona apenas uma linha:
  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 rs As DAO.Recordset
  Set rs = db.OpenRecordset("SELECT d.[Count] FROM [Sheet1$] AS d WHERE d.[Products] = 'Bananas';")
  Debug.Print rs.Fields(0).Value

Espero que você possa ver que isso é muito mais fácil do que iterar em cada linha para descobrir qual delas tem “Bananas” e depois ler a coluna à direita para obter a contagem. Nesse caso, a consulta supera a automatização do Excel.

Conclusão


Você viu que o DAO torna muito fácil para nós trabalhar com a fonte de dados do Excel e fingir como se fosse uma fonte de dados relacional e usar nossa linguagem de consulta favorita e objetos DAO familiares em vez de escrever um monte de código VBA automatizando o Excel para encontrar o dados que queremos. Os parâmetros da cadeia de conexão são bastante diretos e, desde que você tenha o caminho, é bom vincular ou abrir uma planilha do Excel.

No próximo artigo, veremos os parâmetros de conexão do arquivo de texto.