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

Parâmetros de cadeia de conexão para especificações salvas

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 como 10/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 :DM
    • 1 :DIM
    • 2 :MD
    • 3 :MYD
    • 4 :YDM
    • 5 :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 a schema.ini ‘s CharacterSet . 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 registro Computer\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. O FileType é definido como um Integer . 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órmula CInt("&H" & Hex(x)) e para reverter a operação, CLng("&H" & Hex(x)) . Por exemplo, converter a página de código 65000 passaria por CInt("&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 com MSysIMEXColumns.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 o Advanced e salve-o explicitamente.
  • SpecType :só pode ser 1 para significar arquivo delimitado ou 2 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 de 0 . 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 onde N é um número inteiro positivo.
  • IndexType :pode ser 0 para indicar nenhum índice, 1 para indicar índice regular ou 2 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 ao MSysIMEXSpecs.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 do MSysIMEXSpecs 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.