Home > Artikel > Ausgabe 3/2019 > XML exportieren per VBA

XML exportieren per VBA

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Im Artikel XML: Austausch mit Access-Bordmitteln haben wir gezeigt, wie Sie die Daten einer Access-Tabelle oder auch die Daten mehrerer verknüpfter Access-Tabellen in ein XML-Dokument exportieren können. Möglicherweise möchten Sie für einen solchen Export nicht immer den Export-Assistenten bemühen. Deshalb haben wir uns angesehen, wie Sie den Export per VBA durchführen können.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1903_XMLExportierenPerVBA.accdb.

Exportieren per VBA-Methode

Für den Export der Daten aus Tabellen oder Abfragen stellt Access die Methode Export­XML des Application-Objekts bereit. Diese Methode hat die folgenden Pflichtparameter (siehe Bild 1):

Aufruf der Methode ExportXML des Application-Objekts

Bild 1: Aufruf der Methode ExportXML des Application-Objekts

  • ObjectType: Einer der Werte acExportForm, acExportFunction, acExportQuery, acExportReport, acExportServerView, acExportStoredProcedure oder acExportTable. Wir interessieren uns hauptsächlich für den Export von Tabellen, also verwenden wir acExportTable als Wert des ersten Parameters. Wenn Sie beispielsweise das Ergebnis einer Abfrage exportieren wollen, verwenden Sie den Parameterwert acExportQuery.
  • DataSource: Gibt den Namen des zu exportierenden Objekts an, in unserem Fall also etwa den Namen einer Tabelle oder Abfrage.
  • DataTarget: Gibt den Namen der zu erstellenden Datei an. Bei diesem Parameter handelt es sich zwar um einen optionalen Parameter, aber wenn Sie ihn weglassen, liefert Access beim Aufruf von ExportXML eine Fehlermeldung (Ungültige Parameter für ExportXML).

Damit können wir bereits den ersten Test starten und die folgende Anweisung im Direktbereich des VBA-Editors absetzen:

Application.ExportXML acExportTable, "tblKategorien", CurrentProject.Path & "\tblKategorien.xml"

Wir wollen also ein Element des Typs acExportTable exportieren, das den Namen tblKategorien aufweist.

Für die Zieldatei haben wir mit CurrentProject.Path das Verzeichnis der aktuellen Datenbank ermittelt und den Dateinamen tblKategorien.xml angegeben.

Das Ergebnis des Exports finden Sie in Bild 2. Hier ist anzumerken, dass die ExportXML-Anweisung eventuell vorhandene Dateien gleichen Namens ohne Rückfrage überschreibt.

Export der Tabelle tblKategorien (gekürzte Fassung)

Bild 2: Export der Tabelle tblKategorien (gekürzte Fassung)

Die exportierte XML-Datei unterscheidet sich nicht von einer mit dem Export-Assistenten exportieren Tabelle.

Weitere Parameter von ExportXML

Die Methode stellt noch weitere Parameter bereit, die weitgehend die Optionen des Dialogs XML exportieren und des Dialogs zur Anzeige der erweiterten Einstellungen des XML-Exports wiedergeben:

  • SchemaTarget: Wenn Sie eine Schema-Datei erzeugen lassen wollen, geben Sie hier den Namen der Schema-Datei an. Im Dialog XML exportieren erledigen Sie das einfach durch Anhaken der Option Schema der Daten (XSD) – siehe Bild 3. Den Namen geben Sie in den erweiterten Eigenschaften unter Schema ein.
  • Der Dialog XML exportieren

    Bild 3: Der Dialog XML exportieren

  • PresentationTarget: Dafür gilt das gleiche wir für die Option SchemaTarget: Sie geben hier den Namen der zu erstellenden XSL-Datei an. Dies entspricht dem Aktivieren der Option Schema der Daten (XSD) aus dem Dialog XML exportieren. Dort geben Sie den Namen der Präsentationsdatei im erweiterten Dialog unter Präsentation ein.
  • ImageTarget: Erlaubt laut Onlinehilfe die Angabe eines Ordners für Bilddateien. Wir konnten allerdings keine sinnvolle Anwendung für diesen Parameter finden.
  • Encoding: Einer der beiden Werte acUTF8 oder acUTF16.
  • OtherFlags: Weitere Parameter – siehe unten.
  • WhereCondition: Nimmt ein Kriterium entgegen, um die auszugebenden Daten einzuschränken.
  • AdditionalData: Legt fest, welche weiteren Tabellen berücksichtigt werden sollen. Dies ist beim Export über die Benutzeroberfläche im Dialog mit den erweiterten Einstellungen möglich (siehe Bild 4).
  • Weitere Einstellung des Dialogs XML exportieren

    Bild 4: Weitere Einstellung des Dialogs XML exportieren

Der Parameter OtherFlags

Dieser Parameter nimmt eine Kombination aus weiteren Konstanten auf. Diese beschreiben wir in der folgenden Auflistung (hier nur die für unsere Einsatzzwecke sinnvollen Werte). Wenn Sie den Export über die Benutzeroberfläche durchführen, finden Sie die entsprechenden Optionen auf der Registerseite Schema der erweiterten Einstellungen des Dialogs XML exportieren (siehe Bild 5):

Optionen in den erweiterten Einstellungen

Bild 5: Optionen in den erweiterten Einstellungen

  • acEmbedSchema (Zahlenwert 1): Schreibt die Schema-Informationen direkt in das mit dem Parameter DataTarget angebene zu erstellende Dokument. Der Inhalt, der sonst in die durch SchemaTarget angegebene Datei geschrieben wird, landet dann direkt in der unter DataTarget angegebenen Datei.
  • acExcludePrimaryKeyAndIndexes (2): Legt fest, ob Primärschlüssel- und Indexinformationen vom Export ausgeschlossen werden sollen.
  • acExportAllTableAndFieldProperties (32): Legt fest, ob Tabellen- und Feldeigenschaften exportiert werden sollen.

Daten einschränken mit dem Parameter WhereCondition

Wenn Sie nicht alle Daten einer Tabelle in das XML-Dokument exportieren wollen, haben Sie zwei Möglichkeiten: Sie können eine Abfrage erstellen, welche die Daten nach den gewünschten Kriterien filtert.

Oder Sie verwenden den Parameter WhereCondition der ExportXML-Methode.

Wenn Sie etwa nur die erste Kategorie exportieren wollen, verwenden Sie einen Aufruf wie den folgenden:

Application.ExportXML acExportTable, "tblKategorien", CurrentProject.Path & "\tblKategorien.xml", , , , , , "KategorieID = 1"

Sollen Ihnen die ganzen Kommata zu unübersichtlich sein, können Sie auch mit benannten Parametern arbeiten – oder auch mit nur einem benannten Parameter für den letzten Parameter:

Application.ExportXML acExportTable, ­"tblKategorien", CurrentProject.Path & "\tblKategorien.xml", WhereCondition:="KategorieID = 1"

An dieser Stelle ein wichtiger Hinweis, falls Sie als WhereCondition einen Ausdruck verwenden wollen, der mit dem LIKE-Operator und Platzhaltern arbeitet – zum Beispiel diesen hier:

Application.ExportXML acExportTable, ­"tblKategorien", CurrentProject.Path & "\tblKategorien.xml", WhereCondition:="Kategoriename LIKE 'G*'"

Das Ergebnis ist ein XML-Dokument, das nur das Wurzelelement enthält:

<?xml version="1.0" encoding="UTF-8"?>

<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2019-07-31T15:45:01"/>

Der Grund ist, dass die ExportXML-Methode die Platzhalter verwendet, die vom SQL Server bekannt sind. Statt des Sternchens (*) verwenden Sie also das Prozentzeichen (%):

Application.ExportXML acExportTable, ­"tblKategorien", CurrentProject.Path & "\tblKategorien.xml", WhereCondition:="Kategoriename LIKE 'G%'"

Mit dieser Variante landen dann auch wie erwartet die drei Kategorien Getränke, Gewürze und Getreide im exportierten XML-Dokument.

Verknüpfte Tabellen in den Export einbeziehen

Eine Frage haben wir noch nicht gelöst: Wie bekommen wir überhaupt die Daten weiterer Tabellen in die XML-Datei? Für den Parameter DataSource können wir ja nur den Namen einer einzigen Tabelle oder Abfrage angeben.

Und selbst wenn wir dem Ergebnis einer Abfrage Felder aus mehr als einer Tabelle hinzufügen, werden diese nicht strukturiert exportiert.

Die Lösung ist der Parameter AdditionalData. In der Parameterliste ist kein Datentyp für diesen Parameter hinterlegt. Daher schauen wir im Objektkatalog nach, ob wir unter diesem Begriff ein Objekt finden. Das ist auch der Fall: Dort finden wir nicht nur die Klasse AdditionalData, sondern auch noch eine Methode namens CreateAdditionalData (siehe Bild 6).

Die Klasse AdditionalData im Objektkatalog

Bild 6: Die Klasse AdditionalData im Objektkatalog

Um zusätzliche Tabellen zum XML-Export per VBA hinzuzufügen, müssen wir nun allerdings eine VBA-Prozedur bemühen – mit einer einzige Anweisung zum Aufruf der ExportXML-Methode kommen wir nicht mehr aus.

Wenn Sie etwa nur die Daten der Tabelle tblArtikel zusätzlich zur Tabelle tblKategorien exportieren wollen, verwenden Sie die folgende Prozedur:

Public Sub ExportXMLMehrereTabellen()

Dim objAdditionalData As AdditionalData

Set objAdditionalData = Application.CreateAdditionalData

objAdditionalData.Add ("tblArtikel")

Application.ExportXML acExportTable, "tblKategorien", CurrentProject.Path & "\KategorienUndArtikel.xml", AdditionalData:=objAdditionalData

End Sub

Hier erstellen wir ein neues Objekt des Typs AdditionalData und referenzieren es mit der Objektvariablen objAdditionalData.

Dann fügen wir diesem Objekt mit der Add-Methode die Tabelle tblArtikel hinzu. Schließlich geben wir obj­AdditionalData beim Aufruf der Methode ExportXML für den Parameter AdditionalData an.

Das Ergebnis nach dem Aufruf dieser Prozedur ist das gleiche, als wenn wir im Dialog der Benutzeroberfläche die Tabelle tblArtikel zusätzlich markiert hätten.

Weitere verknüpfte Daten exportieren

Nun wollen wir den Export erweitern, und zwar um die Daten der Tabelle tblBestelldetails. Wenn wir diese wie in Bild 7 zum Export hinzufügen, erhalten wir einen Export, bei dem die Einträge der Tabelle tblArtikel denen der Tabelle tblKategorien untergeordnet sind und die der Tabelle tblBestelldetails denen der Tabelle tblArtikel.

Exportieren dreier verknüpfter Daten

Bild 7: Exportieren dreier verknüpfter Daten

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!