Verbindungszeichenfolgenparameter für Textdateiquellen
Im vorherigen Artikel habe ich die Parameter der Verbindungszeichenfolge für Excel-Datenquellen behandelt. Wir konzentrieren uns nun auf die Textdateien. Es gibt verschiedene Methoden, um das Schema von Textdateien zu beschreiben und die Informationen beim Öffnen oder Verknüpfen in Access zu verwenden. Während Excel-Tabellen eine gewisse Strukturähnlichkeit hatten, gilt dies nicht für die Textdateien. Wir müssen mehrere Fragen zur Struktur einer Textdatei beantworten, darunter:
- Ist es eine begrenzte oder feste Breite?
- Wie können wir feststellen, wann eine Spalte endet und eine andere beginnt?
- Werden Texte zitiert oder nicht?
- Wie sollten wir Daten und Zeiten parsen?
- Was ist mit den Währungsbeträgen? Wie sollten sie formatiert sein?
und möglicherweise mehr. Während CSV auf den ersten Blick gut definiert zu sein scheint, ist es, wenn man es genauer betrachtet, eigentlich sehr locker definiert. Es gibt keine allgemeine Einigung darüber, ob Text zitiert werden soll, wie die Datumsangaben formatiert werden sollen. Aus all diesen Gründen erfordert die Verwendung von Textdateien normalerweise die Verwendung einer Art von Schemainformationen, um die Struktur der Textdatei zu beschreiben. Schemainformationen können auf drei Arten gespeichert werden:
- Eine
schema.ini
Datei, die in einem Verzeichnis gespeichert ist - Zugriff auf
MSysIMEX
undMSysIMEXColumns
Tabellen - Zugriff auf die
ImportExportSpecification.XML
Eigentum.
Um die Sache noch komplizierter zu machen, gibt es mehrere verschiedene Methoden, die wir verwenden können, um mit Textdateien zu arbeiten, aber nicht alle Methoden können alle 3 verschiedenen Methoden zum Abrufen der Schemainformationen verwenden. Beispiel:DoCmd.TransferText
funktioniert mit den Systemtabellen, aber nicht mit gespeicherten Importen/Exporten. Andererseits DoCmd.RunSavedImportExport
arbeitet mit der ImportExportSpecification
Objekt. Die ImportExportSpecification
wird im Rahmen der Verlinkung nicht verwendet. Für unsere Diskussion stehen uns also eigentlich nur 2 Methoden im Zusammenhang mit dem Öffnen oder Verlinken einer Textdatei zur Verfügung. Es ist wichtig, den Unterschied zwischen dem Speichern einer Spezifikation in MSysIMEXSpecs
zu beachten &MSysIMEXColumns
Tabellen im Vergleich zum Speichern eines Imports/Exports, der zu einer ImportExportSpecification
wird Objekt. Wir werden diese 2 Methoden in den nächsten Artikeln untersuchen.
Verbindungszeichenfolge für Textdatei
Wir sollten uns überlegen, wie Access eine Textdatei wahrnimmt. Im vorherigen Artikel haben wir gesehen, dass jedes Blatt oder ein benannter Bereich als „Tabelle“ in einer Excel-Tabellen-„Datenbank“ dargestellt wurde. Aber eine Textdatei hat kein solches Konstrukt. Was macht dann eine „Datenbank“ aus? Die Antwort ist, dass der Ordner eine „Datenbank“ darstellt und daher alle Textdateien in einem Ordner „Tabellen“ sind. Aus diesem Grund ist es möglich, mehrere Schemainformationen für denselben Ordner zu haben, wenn dieser Ordner mehr als ein mögliches Format für in dem Ordner gespeicherte Textdateien enthält. Sie werden später sehen, dass wir beim Erstellen der Verbindungszeichenfolge eine Verknüpfung zu dem Ordner herstellen und dann auf die einzelne Datei als Tabelle zugreifen.
Verwenden Sie daher dieses Setup wie gezeigt:
Wir können dann eine Textdatei mit diesem VBA-Code öffnen:
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
Dies sollte die Ausgabe ergeben:
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
Beachten Sie Folgendes:
- Wir haben die Textdatei nicht in unserer Verbindungszeichenfolge angegeben. Wir haben stattdessen Ordner verwendet.
- Die Namen von „Tabellen“ wurden geändert, weil ein Punkt im Namen kein gültiges Zeichen ist. Also
products.csv
wurde zuproducts#csv
. - Im Vergleich zu Excel gibt es keine obligatorischen Parameter außer der Angabe des Textdateitreibers und des Pfads zum Ordner.
Im nächsten Artikel erfahren Sie mehr über die Beschreibung des Schemas einer Textdatei. Für die Verbindungszeichenfolge selbst werden jedoch die folgenden Schlüsselwörter erkannt.
FMT
Parameter:Geben Sie das Format der Textdatei an.
Delimited
:Die Datei wird durch ein Zeichen getrennt. Das verwendete Zeichen wird durch die Schemainformationen angegeben.
Fixed
:Die Datei hat eine feste Breite für Spalten. Auch hier werden die spezifischen Spaltenbreiten durch die Schemainformationen angegeben.
HDR
Parameter:Kopfzeile
YES
:Die erste Zeile ist die Überschrift und sollte die Spaltennamen für die „Tabelle“/“Datensatz“ werden
NO
:Die erste Zeile wird nicht anders behandelt und ist nur ein Datum. Alle Spaltennamen werden „FN“ genannt, wobei „N“ eine Zahl ist, die mit 1 beginnt
IMEX
Parameter:Import-/Exportverhalten
Dies regelt, wie die Spaltendatentypen basierend auf dem Inhalt definiert werden sollen:
1
:Wenn die Spalte unterschiedliche Datentypen enthält, behandeln Sie sie als Zeichenfolge. Andernfalls ordnen Sie die Spalte dem besten Datentyp zu.
2
:Ordnen Sie die Spalte basierend auf der Stichprobe immer einem bestimmten Datentyp zu. Dies kann zu einem Lesefehler führen, wenn wir eine Zeile lesen, die Daten enthält, die nicht dem erwarteten Datentyp entsprechen.
ACCDB
Parameter:Gibt an, dass Access das ACCDB-Dateiformat verwendet?
Standardmäßig ist dies in einem accdb-Dateiformat immer auf ACCDB=YES gesetzt. Es scheint jedoch nichts zu tun, wenn Sie es weglassen oder auf NO setzen. Es ist ein bisschen mysteriös. Wenn jemand mitteilen kann, welche Auswirkungen dieser Parameter hat, posten Sie einen Kommentar und ich werde den Blog aktualisieren.
DATABASE
Parameter:Pfad zum Ordner, der die Textdateien enthält
Der Parameter sollte einen vollständig qualifizierten Pfad enthalten. Die Namen der Textdateien sollten nicht enthalten sein.
CharacterSet
Parameter:Identifiziert die zum Lesen der Textdateien zu verwendende Zeichenkodierung.
Dies wird im nächsten Artikel ausführlicher besprochen. Dies kann auch in den Schemainformationen beschrieben werden.
DSN
Parameter:Identifiziert die mit der Textdatei zu verwendenden Schemainformationen.
Der Name muss der MSysIMEXSpec
entsprechen , die in einem späteren Artikel analysiert werden. Dies funktioniert nur mit dem MSysIMEX***
Tische. Wenn Sie schema.ini
verwenden möchten , fügen Sie einfach keinen DSN
hinzu in Ihren Verbindungszeichenfolgen.
Es ist wichtig zu beachten, dass der Textdateitreiber nur die oben aufgeführten Parameter berücksichtigt. Es ist nicht möglich, andere Schlüsselwörter einzugeben und vom Textdateitreiber zu analysieren. Aus diesem Grund können Sie nicht alle Details über eine Textdatei allein aus der Verbindungszeichenfolge spezifizieren.
Standardschema für Textdateien
Theoretisch können Sie eine Textdatei ohne Schemainformationen öffnen oder verlinken, aber das wird selten funktionieren. In dieser Situation übernimmt Access einfach die Standardeinstellungen für verschiedene Optionen. Wenn die Textdatei allen aktuellen Standardwerten entspricht, kann Access die Datei erfolgreich lesen. Noch wichtiger ist, dass das Fehlen von Fehlern beim Öffnen oder Verknüpfen der Textdatei nicht bedeutet, dass die Daten sinnvoll dargestellt werden. Beispielsweise könnten speziell formatierte Währungsbeträge als Text und nicht als Währung interpretiert werden, und nicht getrennter Text mit Kommas im Text könnte falsch analysiert werden, wodurch unerwünschte Spalten hinzugefügt werden. Die Voreinstellungen werden an zwei möglichen Stellen festgelegt:
- Access prüft die Registrierungseinstellungen. Für die Installation von Office 365 befindet sich die Registrierung unter:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text
. Wir werden diesen Ort in den nächsten Artikeln als „Textregistrierungsschlüssel“ bezeichnen. - Die Einstellungen, die Sie in der
Region
sehen würden Applet in der Systemsteuerung von Windows. Wir werden diesen Ort als „Windows-Einstellungen“ bezeichnen.
Hinweis zur Kodierung der Textdateien
Unabhängig davon, welche Methoden Sie für den Zugriff auf Ihre Textdateien verwenden, ist die richtige Codierung zwingend erforderlich. Wenn der Inhalt Ihrer Textdatei auf nur Zeichen innerhalb der unteren Hälfte der ASCII-Punkte (z. B. 0-127) beschränkt ist, spielt es kaum eine Rolle, welche Kodierung Sie für Ihre Textdateien wählen. Die Standardeinstellung ist normalerweise gut genug. Wenn Ihre Textdateien jedoch Unicode oder Zeichen größer als 127 enthalten können, müssen Sie als Entwickler die Codierung kennen. Wenn eine falsche Kodierung angegeben wird, wird der Text möglicherweise nicht wie erwartet importiert und es werden keine Fehler ausgegeben. Für unordentliche Details verweise ich Sie in dieser Angelegenheit auf Joel Spolsky.
Auswahl zwischen schema.ini
und MSysIMEX***
Tabellen
Wie Sie in den nächsten Artikeln sehen werden, haben beide Methoden eine ziemlich große Überschneidung in den Fähigkeiten. Daher haben Sie möglicherweise die Wahl, beide zu verwenden. Der Hauptunterschied besteht darin, ob das Schema in Ihrer Anwendung oder in einem Ordner gespeichert werden soll, in dem Textdateien erwartet werden. Wenn Sie die schema.ini
verwenden Datei, gehen Sie davon aus, dass die Textdateien in einem bestimmten Ordner vorhanden sind und einen bestimmten Namen haben.
Mit dem MSysIMEX***
können Sie beliebige Textdateien von überall aus verarbeiten, indem Sie einfach auf die definierte Spezifikation verweisen. Es ist jedoch nicht einfach, die Spezifikation außerhalb von Access zu bearbeiten. Selbst innerhalb von Access ist es nicht einfach, Spezifikationen mithilfe der Benutzeroberfläche zu optimieren. Die schema.ini
hat einige zusätzliche Funktionen, die nicht direkt mit MSysIMEX***
verfügbar sind Tabellen.
Nichtsdestotrotz wird die Frage, wo Sie die Spezifikation speichern, höchstwahrscheinlich Ihr wichtigster Faktor bei der Entscheidung sein, welche Sie verwenden möchten.
Schlussfolgerung
Es wird dringend empfohlen, Schemainformationen für alle Textdateien zu definieren, die Daten oder Währungsbeträge enthalten. Die Datums- und Währungsbeträge sind empfindlich gegenüber regionalen Einstellungen, die das korrekte Analysieren der Daten beeinträchtigen können. Da wir zwei verschiedene Systeme mit unterschiedlichen verfügbaren Optionen haben, müssen wir beide in den nächsten Artikeln berücksichtigen. Sie haben die Wahl, entweder (oder sogar beide unter verschiedenen Textdateien) zu verwenden. Wir wenden uns nun der schema.ini
zu im nächsten Artikel. Wir werden uns später MSysIMEX***
ansehen Tabellen im folgenden Artikel.