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

Verbindungszeichenfolgenparameter für Excel-Datenquellen

Verbindungszeichenfolgenparameter für Excel-Datenquellen

Im vorherigen Artikel habe ich besprochen, wie wir Excel- und Textdateien mit DAO so behandeln können, als wären sie eine Datenbank, und wie wir sie ohne Verknüpfung öffnen können. Da sie keine ODBC-Treiber verwenden, wird ihre Verbindungszeichenfolge ganz anders formatiert, als Sie es vielleicht von einer ODBC-Verbindungszeichenfolge gewohnt sind. Es gibt einen Mangel an Dokumentation zu den Parametern der Excel-Verbindungszeichenfolge. Dies ist der beste Versuch, einige der Lücken zu schließen und die Auswirkungen von Parametern zu diskutieren.

Parameter der Excel-Verbindungszeichenfolge

Obwohl wir 3 verschiedene Datenquellen-„Typen“ haben:

  1. Excel 8.0 :97-2003 xls-Dateien
  2. Excel 12.0 :xlsb-Dateien
  3. Excel 12.0 Xml :xlsx-Dateien

Sie verwenden alle dieselben Parameter.

Hier ist die Liste der Parameter:

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.

DATENBANK:Pfad zur Excel-Arbeitsmappe

Der Parameter sollte einen vollständig qualifizierten Pfad enthalten, einschließlich des Namens der Arbeitsmappe.

Minimale funktionierende Verbindungszeichenfolge

Beachten Sie, dass DATABASE neben dem Datentyp-Quellenschlüsselwort der einzige obligatorische Parameter ist. Daher kann eine minimal funktionierende Verbindungszeichenfolge sein:

Excel 8.0;DATABASE=C:\Links\Products.xls

Blatt oder Bereich in Verbindungszeichenfolge angeben

Im vorherigen Beispiel haben Sie gesehen, dass ein Blatt eine „DAO.TableDef darstellt “. Arbeitsblätter sind jedoch nicht das Einzige, was eine „Tabledef“ sein kann “. Wenn die Excel-Tabelle einen benannten Bereich enthält, wird der benannte Bereich als „Tabledef“ gemeldet " auch. Zusätzlich können wir mit der Zellenadresse einen beliebigen Block im Blatt „abfragen“. Zum Beispiel:

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
Set rs = db.OpenRecordsset("Sheet$1A1:A3")

Debug.Print rs.Name, rs.Fields.Count

Es ist wichtig zu beachten, dass die Zellenadressen den verwendeten Bereich des Blatts nicht überschreiten dürfen. Beispiel:Products.xlsx hat eigentlich nur Inhalt in A1:B3, das heißt, wenn Sie ein Recordset mit Sheet1$A1:D5 öffnen, erhalten Sie immer noch nur 2 für die Feldanzahl und 3 für die Datensatzanzahl. Die zusätzlichen leeren Spalten/Zeilen werden einfach ignoriert. Auf der anderen Seite, wenn Sie irgendwo außerhalb von A1:B3 eine Zelle verschmutzt haben , der UsedRange des Blatts wird jetzt so größer und die Abfrage würde dann leere Spalten und Zeilen beinhalten.

Daher sind dies gültige Namen, die in einer Abfrage in einer Excel-„Datenbank“ verwendet werden können:

  1. Sheet1$ – Gesamter verwendeter Bereich eines Arbeitsblatts.
  2. Sheet1$A1:B4 – Nur 2 Spalten und 3 Zeilen (ohne Kopfzeile), sofern der Inhalt gefüllt ist. Andernfalls können Spalten oder Zeilen kleiner sein als angefordert.
  3. ProductsRange – der benannte Bereich mit diesem Namen.

Ich finde es viel schöner, benannte Bereiche zu verwenden, wo dies praktisch ist, da dies sicherstellt, dass Sie die Adressen in Ihrem Code nicht fest codieren, insbesondere wenn der Bereich verschoben wird, weil der Benutzer neue Spalten oder Zeilen einfügt, aber den Inhalt des benannten Bereichs nicht ändert . Dies ist jedoch nicht immer praktisch, insbesondere wenn Sie Tabellenkalkulationen von Drittanbietern erhalten und daher keine Kontrolle über deren Inhalt oder Format haben. In diesem Fall kann auch das Schreiben einer SQL-Abfrage funktionieren.

Excel-Datenquelle abfragen

Angenommen, wir können das Format nicht steuern und möchten uns nicht auf absolute Adressen verlassen, obwohl wir sicher sind, dass bestimmte Spalten und Zeilen tatsächlich vorhanden sein werden. In dieser Situation ist es am besten, nachzufragen. Hier ist ein Beispiel, das nur eine Zeile auswählt:

  Dim db As DAO.Database
  Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")

  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset("SELECT d.[Count] FROM [Sheet1$] AS d WHERE d.[Products] = 'Bananas';")
  Debug.Print rs.Fields(0).Value

Hoffentlich können Sie sehen, dass dies viel einfacher ist, als über jede Zeile zu iterieren, um herauszufinden, welche „Bananas“ enthält, und dann die Spalte rechts zu lesen, um die Zählung zu erhalten. In diesem Fall schlägt die Abfrage die Automatisierung von Excel.

Schlussfolgerung

Sie haben gesehen, dass DAO es uns sehr einfach macht, mit Excel-Datenquellen zu arbeiten und so zu tun, als wäre es eine relationale Datenquelle, und unsere bevorzugte Abfragesprache und vertraute DAO-Objekte zu verwenden, anstatt einen Haufen VBA-Code zu schreiben, der Excel automatisiert, um die zu finden Daten, die wir wollen. Die Parameter der Verbindungszeichenfolge sind ziemlich einfach und solange Sie den Pfad kennen, können Sie eine Excel-Tabelle gut verknüpfen oder öffnen.

Im nächsten Artikel werden wir uns die Verbindungsparameter für Textdateien ansehen.