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

Ad-hoc-Verbindungszeichenfolgen und heterogene Abfragen für MS Access

Ad-hoc-Verbindungszeichenfolgen und heterogene Abfragen für MS Access

Heterogene Abfragen sind der Grund, warum Verbindungszeichenfolgen, insbesondere Ad-hoc-Verbindungszeichenfolgen, wichtig sind. In früheren Artikeln der Serie haben Sie gesehen, wie Sie die Verbindungsparameter für die Verbindung mit Excel- und Textdateien anpassen können. Im Falle der Textdateien können Sie auch das Schema der Struktur der Textdatei entweder mit schema.ini beschreiben oder gespeicherten Spezifikationen. Im ersten Artikel haben Sie auch den Unterschied zwischen dem Verknüpfen und Öffnen einer Datenquelle kennengelernt.

Heterogene Abfragen statt VBA-Code

Sie haben in den vorherigen Artikeln einen Beispielcode zum Öffnen einer solchen Datenquelle mit OpenDatabase von DAO gesehen Methode.

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

Dies könnte den Eindruck hinterlassen, dass eine Datenquelle nur über Code geöffnet werden kann. Das muss aber nicht sein! Sie können tatsächlich eine beliebige Datenquelle öffnen, indem Sie nur die Access-Abfrage verwenden. Hier ist eine Beispielsyntax, die Sie in einer Access-Abfrage ausführen können:

SELECT * 
FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx].[Sheet1$];

Im Allgemeinen die Verbindungszeichenfolge, die Sie in die OpenDatabase einfügen Der vierte Parameter ist derjenige, den Sie der „Tabelle“ voranstellen würden. Daher wäre die allgemeine Syntax:

FROM [<complete connection string>].[<name of the table>]

Sie können die OpenDatabase verwenden -Methode und durchlaufen TableDefs um die gültigen Namen der Tabelle zu finden. Damit können Sie dann den 2. Teil des Namens ausfüllen.

Warum öffnen statt verlinken?

Ein Vorteil des Öffnens gegenüber dem Verknüpfen besteht darin, dass Sie die Verbindungszeichenfolge zur Laufzeit ändern können. Auch die notwendige Bereinigung wie das Löschen der nicht mehr benötigten verknüpften Objekte entfällt. Es ist rein vorübergehend, was perfekt wäre, um Daten von einer Quelle in eine andere zu verschieben, ohne VBA-Code schreiben zu müssen.

Hier ist ein mögliches Szenario. Angenommen, wir möchten Textdateien erstellen, die eine Ausgabe einer Ansicht in unserer SQL Server-Datenbank sind. Sie haben aus früheren Artikeln gesehen, dass wir VBA-Code schreiben können, um die DAO-Datensätze zu durchlaufen und den Inhalt einzeln zu schreiben. Als Alternative können wir jedoch stattdessen einfach eine Access-Abfrage mit diesem SQL erstellen:

INSERT INTO [Text;DATABASE=C:\Links\].[products.csv;] (Products, Count)
SELECT Products, Count
FROM [ODBC;DRIVER=ODBC Driver 17 for SQL Server;SERVER=myServer;DATABASE=myDatabase;].[vwProducts];

Da sowohl das Ziel als auch die Quelle nicht die Quelle von Access sind, nennen wir dies „heterogene Abfrage“. Beachten Sie, dass selbst wenn die Datei vwProducts eine verknüpfte Tabelle wäre, wäre es immer noch eine „heterogene“ Abfrage. Das liegt daran, dass wir immer noch verschiedene Datenquellen in einer einzigen Abfrage mischen.

Noch wichtiger ist, dass wir durch die Verwendung einer heterogenen Abfrage die Notwendigkeit vermeiden, temporäre Objekte in unserer Access-Anwendung zu erstellen. Das Erstellen eines temporären Objekts kann dazu führen, dass die Access-Anwendung aufgebläht wird. Dies ist auch beim Importieren oder Verknüpfen oder beim Verwenden von Recordsets in VBA der Fall. Eine aufgeblähte Datei muss wiederum komprimiert und repariert werden. Wenn Sie jedoch eine heterogene Abfrage verwenden, um Daten direkt von einer Datenquelle in eine andere zu übertragen, vermeiden Sie dieses Aufblähen. Daher eignet es sich ideal für Szenarien, in denen Ihre Access-Anwendung mehrere Dateien ohne Wartung der Anwendung selbst generieren muss.

Konstruieren der Ad-hoc-Verbindungszeichenfolge

Jetzt können Sie sehen, warum es wichtig ist, die in der Verbindungszeichenfolge verwendeten Parameter zu verstehen. Besonders wichtig ist die Kontrolle des Ziels (z. B. Pfad für Textdateien oder Bereich für Excel-Tabelle). Bei diesen nicht relationalen Datenquellen ist es möglicherweise nicht intuitiv, was eine „Datenbank“ und „Tabelle“ in einer solchen Datenquelle ausmacht. Sie können die letzten 3 Artikel als Referenz für Hilfe beim Erstellen der Verbindungszeichenfolge und der Schemainformationen verwenden, um sicherzustellen, dass das Layout richtig herauskommt. Allerdings gibt es auch eine Abkürzung, mit der Sie die Verbindungszeichenfolge finden können.

Sie können die Registerkarte „Extern“ und entweder „Text importieren“ oder „Excel importieren“ verwenden und die Verknüpfungsoption auswählen. Dies ist normalerweise die dritte Option im Assistenten, wie gezeigt.

Nachdem Sie den Assistenten durchlaufen und die neue verknüpfte Tabelle gespeichert haben, können Sie die Verbindungszeichenfolge über das VBA-Direktfenster mit diesem Code überprüfen:

?CurrentDb.TableDefs("<name of linked table>").Connect

Dies kann Ihnen Hinweise zum Erstellen der Verbindungszeichenfolge geben, die Sie dann anpassen können. Meistens werden Sie feststellen, dass Sie den Pfad oder den Tabellennamen anpassen, sodass dies normalerweise als Technik während Ihrer Entwicklung ausreichend ist. Sie können dann entsprechend eine heterogene Abfrage erstellen und die verknüpfte Tabelle löschen.

Schlussfolgerungen

In der Serie haben Sie den Unterschied zwischen Verlinken und Öffnen gelernt. Anschließend haben Sie gesehen, wie Excel- und Textdateien wie eine DAO.Database verwendet werden können Objekte mit „Tabellen“. Mit dem 2. Artikel haben Sie Verbindungsparameter für eine Excel-Arbeitsmappe kennengelernt. Im 3. Artikel haben Sie die Notwendigkeit gesehen, Schemainformationen zu haben, um eine Textdatei zu beschreiben. Der vierte Artikel beschreibt, wie man schema.ini verwendet . Im fünften Artikel haben Sie gesehen, wie die MSysIMEXSpecs und MSysIMEXColumns kann alternativ zur schema.ini verwendet werden Methode.

Schließlich fügen wir alles zusammen, indem wir eine heterogene Abfrage als Beispiel für eine Low-Code-Lösung erstellen. Wir müssen keine große Menge an VBA-Code schreiben, nur um Daten von einer Quelle in eine andere Quelle zu verschieben. Ich denke, Sie werden zustimmen, dass es viel einfacher ist, eine Access-Abfrage durch Anpassen des Pfads oder Tabellennamens zu ändern, als große und komplexe VBA-Routinen zum Lesen und Schreiben von Daten zu schreiben. Noch wichtiger ist, dass es durch die Verwendung einer heterogenen Abfrage viel einfacher wird, die Änderungen in der Struktur auf beiden Seiten zu handhaben. Eine neue Spalte hinzugefügt? Kein Problem, fügen Sie einfach die neue Spalte zur Abfrage hinzu und wir sind fertig.

Wie Sie sehen, erfordert dies jedoch ein gutes Verständnis des Aufbaus der Verbindungszeichenfolge. Aus diesem Grund war es notwendig, die Feinheiten der Verbindungszeichenfolge eingehend zu studieren, wie wir es vom 2. bis zum 5. Artikel getan haben. Wir können jedoch den Assistenten für verknüpfte Tabellen verwenden, um uns den Hinweis auf die Verbindungszeichenfolgen zu geben. Aber es sind nur Hinweise. Daher ist es gut zu wissen, wie man die Ausgabe genau steuert. Ich hoffe, Sie stimmen zu, dass sich die Investition in das Verständnis der Funktionsweise von Verbindungszeichenfolgen in Form von eingesparter Arbeit bezahlt macht.