Access
 sql >> Datenbank >  >> RDS >> Access

Parameter der Verbindungszeichenfolge für Textdateiquellen

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:

  1. Ist es eine begrenzte oder feste Breite?
  2. Wie können wir feststellen, wann eine Spalte endet und eine andere beginnt?
  3. Werden Texte zitiert oder nicht?
  4. Wie sollten wir Daten und Zeiten parsen?
  5. 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:

  1. Eine schema.ini Datei, die in einem Verzeichnis gespeichert ist
  2. Zugriff auf MSysIMEX und MSysIMEXColumns Tabellen
  3. 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:

  1. Wir haben die Textdatei nicht in unserer Verbindungszeichenfolge angegeben. Wir haben stattdessen Ordner verwendet.
  2. Die Namen von „Tabellen“ wurden geändert, weil ein Punkt im Namen kein gültiges Zeichen ist. Also products.csv wurde zu products#csv .
  3. 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:

  1. 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.
  2. 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.