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

Paramètres de chaîne de connexion pour les sources de fichiers texte

Paramètres de chaîne de connexion pour les sources de fichiers texte

Dans l'article précédent, j'ai couvert les paramètres de chaîne de connexion pour les sources de données Excel. Nous allons maintenant nous concentrer sur les fichiers texte. Il existe différentes méthodes pour décrire le schéma des fichiers texte et utiliser les informations lors de l'ouverture ou de la liaison dans Access. Alors que les feuilles de calcul Excel avaient une certaine ressemblance de structure, ce n'est pas vrai pour les fichiers texte. Nous devons répondre à plusieurs questions sur la structure d'un fichier texte dont :

  1. Est-il délimité ou à largeur fixe ?
  2. Comment savoir quand une colonne se termine et une autre commence ?
  3. Le texte est-il entre guillemets ou non ?
  4. Comment analyser les dates et les heures ?
  5. Qu'en est-il des montants en devises ? Comment doivent-ils être formatés ?

et éventuellement plus. Bien que CSV puisse sembler bien défini au premier coup d'œil, mais lorsque vous y creusez, il est en fait très vaguement défini. Il n'y a pas d'accord universel sur la question de savoir si le texte doit être cité, comment les dates doivent être formatées. Pour toutes ces raisons, l'utilisation de fichiers texte nécessite généralement l'utilisation d'un certain type d'informations de schéma pour décrire la structure du fichier texte. Il existe trois façons de stocker les informations de schéma :

  1. Un schema.ini fichier stocké dans un répertoire
  2. Accès’ MSysIMEX et MSysIMEXColumns tableaux
  3. Accéder à ImportExportSpecification.XML propriété.

Pour compliquer les choses, il existe plusieurs méthodes différentes que nous pouvons utiliser pour travailler avec des fichiers texte, mais toutes les méthodes ne peuvent pas utiliser les 3 manières différentes d'obtenir les informations de schéma. Par exemple, DoCmd.TransferText fonctionne avec les tables système mais pas les importations/exportations enregistrées. D'autre part, DoCmd.RunSavedImportExport fonctionne avec le ImportExportSpecification objet. Cependant, le ImportExportSpecification n'est pas utilisé dans le cadre du lien. Donc, pour notre discussion, nous n'avons en fait que 2 méthodes disponibles dans le cadre de l'ouverture ou de la liaison à un fichier texte. Il est important de noter la distinction entre l'enregistrement d'une spécification dans le MSysIMEXSpecs &MSysIMEXColumns tables par rapport à l'enregistrement d'une importation/exportation qui devient une ImportExportSpecification objet. Nous explorerons ces 2 méthodes dans les prochains articles.

Chaîne de connexion pour le fichier texte

Nous devrions considérer comment Access percevra un fichier texte. Dans l'article précédent, nous avons vu que chaque feuille ou une plage nommée était représentée sous la forme d'un "tableau" dans une "base de données" de feuille de calcul Excel. Mais un fichier texte n'a pas une telle construction. Qu'est-ce qu'une « base de données » alors ? La réponse est que le dossier représente une "base de données" et donc tous les fichiers texte dans un dossier sont des "tableaux". Pour cette raison, il est possible d'avoir plusieurs informations de schéma pour le même dossier si ce dossier contient plus d'un format possible pour tous les fichiers texte stockés dans le dossier. Vous verrez plus tard que lorsque nous construisons la chaîne de connexion, nous établissons un lien vers le dossier, puis accédons au fichier individuel sous forme de table.

Par conséquent, utilisez cette configuration comme indiqué :

On peut alors ouvrir un fichier texte en utilisant ce code VBA :

Dim db As DAO.Database
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DATABASE=C:\Links")

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
    
    Debug.Print
Next

Cela devrait donner le résultat :

Products#csv
Products      Count         PackDate      Amount        ShipDate      
Apples         3            12/4/2020     $ 1.02        4/12/2020     
Bananas        5            4/12/2020     $ 1,234.56    12/4/2020     
Figs           8            5/7/2020      $ 0.01        7/5/2020      
Grapes         11           10/10/2020    $12.30        10/10/2020

Prenez note des éléments suivants :

  1. Nous n'avons pas spécifié le fichier texte dans notre chaîne de connexion. Nous avons utilisé le dossier à la place.
  2. Les noms des "tables" ont été modifiés car un point dans le nom n'est pas un caractère valide. Donc, products.csv est devenu products#csv .
  3. Par rapport à Excel, il n'y a pas de paramètres obligatoires au-delà de la spécification du pilote de fichier texte et du chemin d'accès au dossier.

Dans le prochain article, vous en apprendrez plus sur la description du schéma d'un fichier texte. Cependant, pour la chaîne de connexion elle-même, les mots clés suivants sont reconnus.

FMT paramètre :Indiquez le format du fichier texte.

Delimited :Le fichier est délimité par un caractère. Le caractère utilisé est spécifié par les informations du schéma.
Fixed :Le fichier a une largeur fixe pour les colonnes. Là encore, la ou les largeurs de colonne spécifiques sont spécifiées par les informations de schéma.

HDR paramètre :Ligne d'en-tête

YES  :La première ligne est l'en-tête et devrait devenir les noms de colonne pour le "table"/"recordset"
NO :La première ligne n'est pas traitée différemment et est juste une donnée. Tous les noms de colonne seront nommés "FN" où "N" est un nombre commençant par 1

IMEX paramètre :Comportement d'importation/exportation

Cela régit la façon dont les types de données de colonne doivent être définis, en fonction du contenu :
1 :Si la colonne contient différents types de données, traitez-la comme une chaîne. Sinon, faites correspondre la colonne au meilleur type de données.
2 :associez toujours la colonne à un certain type de données en fonction de l'échantillon. Cela peut entraîner une erreur de lecture lorsque nous lisons une ligne contenant des données qui ne correspondent pas au type de données attendu.

ACCDB paramètre :indique qu'Access utilise le format de fichier ACCDB ?

Par défaut, ceci est toujours défini ACCDB=YES dans un format de fichier accdb. Cependant, l'omettre ou le définir sur NON ne semble rien faire. C'est un peu un mystère. Si quelqu'un peut partager l'effet de ce paramètre, postez-le en commentaire et je mettrai à jour le blog.

DATABASE paramètre :Chemin d'accès au dossier contenant les fichiers texte

Le paramètre doit contenir un chemin complet. Il ne doit pas inclure les noms des fichiers texte.

CharacterSet Paramètre :Identifie le codage de caractères à utiliser pour lire les fichiers texte.

Cela sera discuté plus en détail dans le prochain article. Cela peut également être décrit dans les informations de schéma.

DSN Paramètre :identifie les informations de schéma à utiliser avec le fichier texte.

Le nom doit correspondre au MSysIMEXSpec , qui sera analysé dans un article ultérieur. Cela ne fonctionne qu'avec le MSysIMEX*** les tables. Si vous souhaitez utiliser schema.ini , vous n'incluez tout simplement aucun DSN dans vos chaînes de connexion.

Il est important de noter que le pilote de fichier texte ne prendra en compte que les paramètres répertoriés ci-dessus. Il n'est pas possible de mettre d'autres mots clés et de les faire analyser par le pilote de fichier texte. Pour cette raison, vous ne pourrez pas spécifier tous les détails d'un fichier texte à partir de la seule chaîne de connexion.

Schéma par défaut pour les fichiers texte

En théorie, vous pouvez ouvrir ou lier un fichier texte sans aucune information de schéma, mais cela fonctionnera rarement. Dans cette situation, Access assumera simplement les valeurs par défaut pour diverses options. Si le fichier texte est conforme à toutes les valeurs par défaut actuelles, Access réussira à lire le fichier. Plus important encore, l'absence d'erreurs lors de l'ouverture ou de la liaison au fichier texte ne signifie pas que les données sont représentées de manière significative. Par exemple, les montants en devise spécialement formatés peuvent être interprétés comme du texte plutôt que comme une devise, et le texte non délimité avec des virgules dans le texte peut être mal analysé, ajoutant des colonnes indésirables. Les valeurs par défaut sont déterminées à deux endroits possibles :

  1. Access examinera les paramètres du registre. Pour l'installation d'Office 365, le registre peut être situé à :
    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text . Nous ferons référence à cet emplacement sous le nom de "clés de registre de texte" dans les prochains articles.
  2. Les paramètres que vous verriez dans la Region applet dans le panneau de configuration de Windows. Nous appellerons cet emplacement "Paramètres Windows".

Remarque sur l'encodage des fichiers texte

Il est obligatoire d'avoir le bon encodage quelles que soient les méthodes que vous utilisez pour accéder à vos fichiers texte. Lorsque le contenu de votre fichier texte est limité aux seuls caractères dans la moitié inférieure des points ASCII (par exemple 0-127), peu importe le codage que vous choisissez pour vos fichiers texte. La valeur par défaut est généralement suffisante. Cependant, si vos fichiers texte peuvent contenir du Unicode ou des caractères supérieurs à 127, c'est à vous, le développeur, de connaître l'encodage. Si un encodage incorrect est spécifié, le texte peut ne pas être importé comme prévu et ne générera aucune erreur. Pour les détails compliqués, je vous renverrai à Joel Spolsky à ce sujet.

Choisir entre schema.ini et MSysIMEX*** tableaux

Comme vous le verrez dans les prochains articles, les deux méthodes ont un chevauchement assez important dans les capacités. Par conséquent, vous pouvez avoir le choix d'utiliser l'un ou l'autre. La principale différence se résume à savoir si vous souhaitez que le schéma soit stocké dans votre application ou dans un dossier où les fichiers texte sont censés se trouver. Lorsque vous utilisez le schema.ini fichier, vous supposez que les fichiers texte seront présents dans un certain dossier et auront un certain nom.

Avec le MSysIMEX*** , vous pouvez traiter n'importe quel fichier texte de n'importe où en vous référant simplement à la spécification définie. Cependant, il n'est pas facile de modifier la spécification en dehors d'Access. Même dans Access, il n'est pas facile de modifier les spécifications à l'aide de l'interface utilisateur. Le schema.ini a quelques fonctionnalités supplémentaires qui ne sont pas directement disponibles avec MSysIMEX*** tableaux.

Néanmoins, la question de savoir où stocker la spécification sera probablement votre facteur le plus important pour décider lequel utiliser.

Conclusion

Nous vous encourageons vivement à définir des informations de schéma pour tous les fichiers texte contenant des dates ou des montants en devises. Les dates et les montants en devise sont sensibles au paramètre régional qui peut interférer avec l'analyse correcte des données. Parce que nous avons deux systèmes différents avec différents ensembles d'options disponibles, nous devons considérer chacun dans les prochains articles. Vous avez le choix d'utiliser l'un ou l'autre (ou même les deux parmi différents fichiers texte). Nous allons maintenant passer au schema.ini dans le prochain article. Nous verrons plus tard MSysIMEX*** tableaux dans l'article suivant.