Access
 sql >> Base de données >  >> RDS >> Access

Paramètres de chaîne de connexion pour les spécifications enregistrées

Paramètres de chaîne de connexion pour les spécifications enregistrées

Access fournit une deuxième méthode pour décrire le schéma des fichiers texte en utilisant les tables système MSysIMEXSpecs et MSysIMEXColumns pour enregistrer les spécifications. Dans l'article précédent, j'ai expliqué comment schema.ini peut être utilisé pour décrire la structure d'un fichier texte. Le schema.ini impliquait un fichier texte externe référencé implicitement mais avec les tables système, nous n'avons aucune dépendance externe. La structure est assez différente même s'il y a quelques chevauchements.

MSysIMEXSpecs et MSysIMEXColumns table système

Au lieu de compter sur un schema.ini externe pour être présent dans le même dossier que le fichier texte, il est possible de fournir des spécifications pour un fichier texte dans n'importe quel chemin en référençant la spécification enregistrée dans la base de données Access. Lorsque vous utilisez l'assistant d'importation ou d'exportation, vous pouvez enregistrer ou charger les spécifications via l'onglet Advanced bouton.

Cliquez sur le bouton avancé pour afficher la boîte de dialogue de spécification. Outre le chargement ou l'enregistrement des spécifications, vous pouvez également personnaliser les spécifications à l'aide de la boîte de dialogue affichée.

Chaque fois qu'une spécification est enregistrée, elle est écrite à la fois dans les MSysIMEXSpecs et MSysIMEXColumns tableaux système. Les tables n'existent pas dans un nouveau fichier Access et ne seront créées que la première fois. De plus, vous pouvez modifier ou même supprimer des données de ces tables. Même ainsi, ce sont toujours des tables système, elles sont donc masquées par défaut. Si vous voulez les voir dans le volet de navigation, vous devrez accéder aux options de navigation et activer la visibilité pour les objets masqués et système.

Si vous comparez les options disponibles dans la boîte de dialogue avec les options que vous avez dans le schema.ini , vous pouvez voir quelques différences notables. Par exemple, le schema.ini permet plus de choix en ce qui concerne la façon dont les dates ou les montants en devises peuvent être formatés. Avec les spécifications enregistrées, nous ne pouvons contrôler le formatage de la date qu'à partir d'une liste prédéfinie de formats possibles. Il n'y a pas d'options directes pour les montants en devise, car nous utilisons le type de données pour indiquer qu'une colonne doit être importée en tant que devise, quel que soit le formatage. Ainsi, les options des tables système sont simples par rapport au schema.ini. Nous examinerons ensuite la structure des tables.

MSysIMEXSpecs structure

Le tableau représente un ensemble de spécifications enregistrées. Pour chaque ligne, le tableau décrit le format général du fichier, similaire à la 2ème section du schema.ini . Cependant, il existe différentes options qui doivent être prises en compte.

  • DateDelim :Identifie le délimiteur des dates. Il s'agit généralement de / ou - . Il peut s'agir d'un ou de zéro caractère uniquement.
  • DateFourDigitYear :Un champ Oui/Non indiquant si les dates sont formatées avec quatre chiffres pour les années. Si défini sur oui, des valeurs telles que 10/10/20 ne seraient pas considérées comme des dates valides.
  • DateLeadingZeros :Un autre champ Oui/Non indiquant si les dates ont des zéros non significatifs.
  • DateOrder :détermine le formatage de la date que nous voulons utiliser. Les codes suivants sont valides :
    • 0 :DMY
    • 1 :DYM
    • 2 :MDY
    • 3 :MYD
    • 4 :YDM
    • 5 :AMJ
  • DecimalPoint :Indique le caractère pour séparer la partie entière et fractionnaire d'un nombre décimal. Il doit être exactement un seul caractère.
  • FieldSeparator :Sépare les champs dans le fichier texte. Pour un fichier CSV, ce serait , (un caractère virgule). De plus, il doit s'agir exactement d'un seul caractère.
  • FileType :Similaire à schema.ini 's CharacterSet . Comme mentionné dans l'article précédent, vous pouvez localiser toutes les pages de code possibles prises en charge sur votre machine Windows, regardez dans la clé de registre Computer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\ . Il identifie l'encodage du fichier texte. Vous pouvez utiliser le même identifiant de page de codes. Cependant, il y a un problème. Le FileType est défini comme un Integer . Par conséquent, une page de code 65000 (par exemple Unicode) serait signalée comme -536. Pour convertir tout identifiant de page de code supérieur à 32767, vous pouvez utiliser la formule CInt("&H" & Hex(x)) et pour inverser l'opération, CLng("&H" & Hex(x)) . Par exemple, la conversion de la page de code 65000 passerait par CInt("&H" & Hex(65000)) pour donner -536. Pour inverser, CLng("&H" & Hex(-536)) pour récupérer 65000 à nouveau.
  • SpecID :numérotation automatique de la table. Notez qu'il ne s'agit pas de la clé primaire de la table. Cette colonne est utilisée avec MSysIMEXColumns.SpecID pour relier des enregistrements. Cependant, il n'y a pas de contrainte de clé étrangère entre les deux tables, des suppressions orphelines peuvent donc se produire.
  • SpecName :La clé primaire de la table. Il identifie de manière unique la spécification. Chaque fois que vous enregistrez une spécification, le nom que vous fournissez sera enregistré dans ce champ. Lorsque vous importez ou exportez à l'aide d'assistants, Access peut créer automatiquement une nouvelle spécification même si vous n'avez pas utilisé l'option Advanced et enregistrez-le explicitement.
  • SpecType :Il ne peut s'agir que de 1 pour signifier fichier délimité ou 2 pour signifier un fichier à largeur fixe.
  • StartRow :détermine la ligne sur le fichier texte pour commencer la numérisation pour l'importation. Cela peut être n'importe quel nombre, il est donc possible de sauter plusieurs lignes en haut du fichier. Cela peut être utile pour les fichiers texte mal formés qui ont des en-têtes non conformes.
  • TextDelim :Un seul caractère qui délimite une valeur de texte. Il peut être omis si le texte n'est pas délimité. Si vous pouvez contrôler le format des fichiers texte, c'est généralement une bonne idée d'avoir des délimiteurs de texte. Un fichier texte avec des délimiteurs de texte restera bien formé même si le texte contient des séparateurs de champs (par exemple, une virgule) dans le texte.
  • TimeDelim :Indique le caractère délimiteur utilisé pour l'heure. Il peut s'agir de n'importe quel caractère ou être vide et la valeur par défaut est : (un caractère deux-points).

MSysIMEXColumns structure

Le tableau décrit les colonnes individuelles du fichier texte et tous les attributs. Cela correspond à peu près à la troisième section du schema.ini . Cependant, il existe des options supplémentaires telles que l'indexation qui n'existent pas dans schema.ini .

  • Attributes :Inconnue. Dans mes tests, je n'ai jamais rien compris d'autre que 0 . Si vous savez à quoi il sert et comment il peut être utilisé, n'hésitez pas à laisser un commentaire.
  • DataType :le type de données de la colonne. Le numéro doit correspondre au DAO.DataTypeEnum.
  • FieldName :Le nom de la colonne. Notez que Access sera par défaut FieldNN est un entier positif.
  • IndexType :Peut être 0 pour indiquer aucun index, 1 pour indiquer l'index régulier ou 2 pour indiquer un index unique.
  • SkipColumns :Une valeur booléenne indique si la colonne doit être ignorée. S'il est ignoré, il ne sera pas disponible pour l'interrogation ou la lecture.
  • SpecID :Correspond au MSysIMEXSpecs.SpecID Numéro automatique. Notez qu'il n'y a pas de contraintes de clé étrangère entre les deux tables. Si vous avez supprimé des enregistrements, il peut y avoir des enregistrements orphelins de MSysIMEXSpecs tableau.
  • Start :Un entier indiquant quand la colonne commence sur le fichier texte. Il est significatif pour un fichier à largeur fixe. Pour les fichiers délimités, Access utilisera toujours la position de colonne de la première ligne où se trouve le champ pour déterminer le début. De plus, Access utilisera la colonne pour impliquer l'ordre ordinal des colonnes.
  • Width :Un autre entier pour régir la taille de la colonne. Sur un fichier à largeur fixe, cela est également significatif. Sachez que Microsoft Access utilisera ces informations pour les types de données de longueur variable, tels que texte ou binaire, afin de dimensionner la colonne en conséquence, même sur un fichier délimité.

Chaîne de connexion utilisant les spécifications :DSN paramètre

Dans l'article précédent, vous avez vu qu'il n'y avait aucun changement dans la chaîne de connexion afin d'utiliser un fichier schema.ini. Nous nous sommes implicitement référés au schema.ini simplement en s'assurant qu'il existe dans le même dossier où se trouve le fichier texte que nous lions ou ouvrons. Cependant, pour utiliser les spécifications enregistrées du système, nous devons fournir les informations dans la connexion. Nous faisons cela en renseignant le DSN paramètre. La valeur doit faire référence au nom de la spécification enregistrée, tel qu'enregistré dans le MSysIMEXSpecs.SpecName colonne.

Voici un exemple :

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")

L'accès nécessitera que le paramètre DSN et les paramètres IMEX soient fournis dans la chaîne de connexion. Si vous essayez d'omettre le IMEX paramètre, vous obtiendrez une erreur indiquant qu'Access ne peut pas trouver la spécification, même si la spécification existe dans le MSysIMEXSpecs table. Il s'ensuit également que la table doit contenir un enregistrement avec SpecName contenant la même valeur fournie dans la DSN paramètre.

Comme indiqué dans l'article précédent, les fichiers texte individuels sont traités comme une "table" dans la "base de données" du dossier. Ainsi, bien que la chaîne de connexion ne pointe pas vers un fichier texte spécifique, la chaîne de connexion utilisera les spécifications spécifiées sur tous les fichiers texte ouverts via la connexion.

Bien qu'il soit possible d'utiliser d'autres paramètres comme indiqué dans le même article, vous devez savoir qu'en cas de conflit, la spécification enregistrée prévaudra sur la chaîne de connexion. Pour cette raison, il est préférable d'utiliser un ensemble minimal de paramètres requis pour se connecter avec succès à un fichier texte et laisser les spécifications enregistrées décrire comment lire le fichier texte.

Conclusion

Vous avez appris une autre façon de décrire la structure du fichier texte sans utiliser de fichier externe. Nous avons examiné comment Access utilise deux tables système pour stocker les spécifications. Enfin, vous avez également appris à spécifier les spécifications enregistrées à l'aide de la DSN paramètre. À ce stade, nous avons couvert tout ce que nous devons savoir sur la liaison ou l'ouverture de fichiers texte dans Access. Dans le prochain article, nous rassemblerons les informations apprises dans le reste de la série. Nous examinerons également l'utilisation des chaînes de connexion dans les requêtes Access pour une approche sans code.