Parâmetros de string de conexão para especificações salvas
O Access fornece um segundo método para descrever o esquema dos arquivos de texto usando as tabelas do sistema
MSysIMEXSpecs
e MSysIMEXColumns
para salvar as especificações. No artigo anterior, abordei como schema.ini
pode ser usado para descrever a estrutura de um arquivo de texto. O schema.ini
envolveu um arquivo de texto externo referenciado implicitamente, mas com as tabelas do sistema, não temos dependências externas. A estrutura é bastante diferente, embora haja algumas sobreposições. MSysIMEXSpecs
e MSysIMEXColumns
tabela do sistema
Em vez de depender de um schema.ini externo para estar presente na mesma pasta que o arquivo de texto, é possível fornecer especificações para um arquivo de texto em qualquer caminho fazendo referência à especificação salva no banco de dados do Access. Ao usar o assistente de importação ou exportação, você pode salvar ou carregar as especificações por meio do
Advanced
botão.Clicar no botão avançado exibirá a caixa de diálogo de especificação. Além de carregar ou salvar as especificações, você também pode personalizar as especificações usando a caixa de diálogo mostrada.
Sempre que uma especificação é salva, ela é gravada no
MSysIMEXSpecs
e MSysIMEXColumns
tabelas do sistema. As tabelas não existem em novos arquivos do Access e serão criadas apenas na primeira vez. Além disso, você pode editar ou até excluir dados dessas tabelas. Mesmo assim, elas ainda são tabelas do sistema, portanto, estão ocultas por padrão. Se você quiser vê-los no painel de navegação, precisará acessar as Opções de navegação e habilitar a visibilidade para objetos ocultos e do sistema. Se você comparar as opções disponíveis na caixa de diálogo com as opções que você tem no
schema.ini
, você pode ver algumas diferenças notáveis. Por exemplo, o schema.ini
permite mais opções em relação a como as datas ou valores monetários podem ser formatados. Com as especificações salvas, só podemos controlar a formatação da data a partir de uma lista predefinida de formatos possíveis. Não há opções diretas para valores de moeda porque usamos o Tipo de dados para indicar que uma coluna deve ser importada como moeda, independentemente da formatação. Assim, as opções das tabelas do sistema são simples em comparação com o schema.ini. Vamos rever a estrutura das tabelas a seguir. MSysIMEXSpecs
estrutura
A tabela representa um conjunto de especificações salvas. Para cada linha, a tabela descreve o formato geral do arquivo, semelhante à segunda seção do
schema.ini
. No entanto, existem diferentes opções que precisam ser consideradas. DateDelim
:Identifica o delimitador para as datas. Normalmente é/
ou-
. Pode ter apenas um ou zero caractere.DateFourDigitYear
:Um campo Sim/Não indicando se as datas são formatadas com quatro dígitos para anos. Se definido como sim, valores como10/10/20
não seriam consideradas datas válidas.DateLeadingZeros
:outro campo Sim/Não indicando se as datas têm zeros à esquerda.DateOrder
:Determina a formatação de data que queremos usar. Os seguintes códigos são válidos:0
:DM1
:DIM
2
:MD3
:MYD
4
:YDM5
:YMD
DecimalPoint
:Indica o caractere para separar a parte integral e fracionária de um número decimal. Deve ter exatamente um caractere apenas.FieldSeparator
:Separa os campos no arquivo de texto. Para um arquivo CSV, seria,
(um caractere de vírgula). Além disso, deve ter apenas um caractere.FileType
:Semelhante aschema.ini
‘sCharacterSet
. Conforme mencionado no artigo anterior, você pode localizar todas as páginas de código possíveis com suporte em sua máquina Windows, procure na chave do registroComputer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\
. Ele identifica a codificação do arquivo de texto. Você pode usar o mesmo identificador de página de código. No entanto, há um problema. OFileType
é definido como umInteger
. Portanto, uma página de código 65000 (por exemplo, Unicode) seria relatada como -536. Para converter qualquer identificador de página de código maior que 32767, você pode usar a fórmulaCInt("&H" & Hex(x))
e para reverter a operação,CLng("&H" & Hex(x))
. Por exemplo, converter a página de código 65000 passaria porCInt("&H" & Hex(65000))
para render -536. Para reverter,CLng("&H" & Hex(-536))
para recuperar 65.000.SpecID
:Autonumber para a tabela. Observe que esta não é a chave primária da tabela. Esta coluna é usada comMSysIMEXColumns.SpecID
relacionar registros. No entanto, não há restrição de chave estrangeira entre as duas tabelas, portanto, podem ocorrer exclusões órfãs.SpecName
:A chave primária da tabela. Ele identifica exclusivamente a especificação. Sempre que você salvar uma especificação, o nome fornecido será registrado neste campo. Quando você importa ou exporta usando assistentes, o Access pode criar automaticamente uma nova especificação mesmo que você não tenha usado oAdvanced
e salve-o explicitamente.SpecType
:só pode ser1
para significar arquivo delimitado ou2
para significar arquivo de largura fixa.StartRow
:determina a linha no arquivo de texto para iniciar a varredura para importação. Isso pode ser qualquer número, então é possível pular várias linhas na parte superior do arquivo. Pode ser útil para arquivos de texto mal formados com cabeçalhos não conformes.TextDelim
:Um único caractere que delimita um valor de texto. Pode ser omitido se o texto não for delimitado. Se você pode controlar o formato dos arquivos de texto, geralmente é uma boa ideia ter delimitadores de texto. Um arquivo de texto com delimitadores de texto permanecerá bem formado mesmo que o texto contenha separadores de campo (por exemplo, uma vírgula) dentro do texto.TimeDelim
:Indica o caractere delimitador usado para a hora. Pode ser qualquer caractere único ou estar em branco e o padrão é:
(um caractere de dois pontos).
MSysIMEXColumns
estrutura
A tabela descreve as colunas individuais no arquivo de texto e quaisquer atributos. Isso corresponde aproximadamente à terceira seção do
schema.ini
. No entanto, existem opções adicionais, como indexação, que não existem em schema.ini
. Attributes
:Desconhecido. Nos meus testes eu nunca consegui ser nada além de0
. Se você sabe para que serve e como pode ser usado, sinta-se à vontade para deixar um comentário.DataType
:o tipo de dados da coluna. O número deve corresponder ao DAO.DataTypeEnum.FieldName
:o nome da coluna. Observe que o padrão de acesso seráFieldN
ondeN
é um número inteiro positivo.IndexType
:pode ser0
para indicar nenhum índice,1
para indicar índice regular ou2
para indicar um índice exclusivo.SkipColumns
:um valor booleano indica se a coluna deve ser ignorada. Se ignorado, não estará disponível para consulta ou leitura.SpecID
:Corresponde aoMSysIMEXSpecs.SpecID
numeração automática. Observe que não há restrições de chave estrangeira entre as duas tabelas. Se você excluiu registros, pode haver registros órfãos doMSysIMEXSpecs
tabela.Start
:Um número inteiro que indica quando a coluna inicia no arquivo de texto. É significativo para um arquivo de largura fixa. Para arquivos delimitados, o Access ainda usará a posição da coluna da primeira linha em que o campo for encontrado para determinar o início. Além disso, o Access usará a coluna para indicar a ordenação ordinal das colunas.Width
:Outro inteiro para controlar o tamanho da coluna. Em um arquivo de largura fixa, isso também é significativo. Esteja ciente de que o Microsoft Access usará essas informações para tipos de dados de comprimento variável, como texto ou binário, para dimensionar a coluna adequadamente, mesmo em um arquivo delimitado.
String de conexão usando especificações:DSN
parâmetro
No artigo anterior, você viu que não houve alteração na cadeia de conexão para usar um arquivo schema.ini. Referimo-nos implicitamente ao
schema.ini
simplesmente garantindo que ele exista na mesma pasta onde o arquivo de texto que estamos vinculando ou abrindo está presente. No entanto, para usar as especificações salvas do sistema, é necessário fornecer as informações na conexão. Fazemos isso preenchendo o DSN
parâmetro. O valor deve se referir ao nome da especificação salva, conforme registrado no MSysIMEXSpecs.SpecName
coluna. Aqui está uma amostra:
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")
O acesso exigirá que o parâmetro DSN e os parâmetros IMEX sejam fornecidos na cadeia de conexão. Se você tentar omitir o
IMEX
, você receberá um erro sobre o Access não conseguir encontrar a especificação, mesmo que a especificação exista no MSysIMEXSpecs
tabela. Segue também que a tabela deve conter um registro com SpecName
contendo o mesmo valor fornecido no DSN
parâmetro. Conforme observado no artigo anterior, os arquivos de texto individuais são tratados como uma “tabela” dentro do “banco de dados” da pasta. Portanto, embora a cadeia de conexão não aponte para um arquivo de texto específico, a cadeia de conexão usará as especificações especificadas em qualquer arquivo de texto aberto por meio da conexão.
Embora seja possível usar outros parâmetros conforme discutido no mesmo artigo, você deve estar ciente de que, quando em conflito, a especificação salva terá precedência sobre a cadeia de conexão. Por esse motivo, é melhor usar um conjunto mínimo de parâmetros necessários para conectar-se com sucesso a um arquivo de texto e deixar as especificações salvas descreverem como ler o arquivo de texto.
Conclusão
Você aprendeu uma maneira alternativa de descrever a estrutura do arquivo de texto sem usar um arquivo externo. Analisamos como o Access usa duas tabelas de sistema para armazenar as especificações. Por fim, você também aprendeu como especificar as especificações salvas usando o
DSN
parâmetro. Neste ponto, cobrimos tudo o que precisamos saber sobre como vincular ou abrir arquivos de texto no Access. No próximo artigo, reuniremos todas as informações aprendidas no restante da série. Também veremos o uso das cadeias de conexão nas consultas do Access para uma abordagem sem código.