XML-Export ohne VBA

Für den einen oder anderen Anwendungsfall benötigen Sie die Daten aus den Tabellen Ihrer Datenbank im XML-Format – zum Beispiel, um diese von einer anderen Anwendung aus einzulesen. Access stellt verschiedene Möglichkeiten für den Export von Daten im XML-Format zur Verfügung. Wir schauen uns an, wie dies über die Benutzeroberfläche gelingt und welche Möglichkeiten VBA für diesen Zweck bietet – diesmal ohne Nutzung externer Bibliotheken, also ausschließlich mit Bordmitteln.

XML ist ein wichtiges Austauschformat für Daten. Sehr viele Webservices bieten ihre Daten in diesem Format an oder nehmen diese so entgegen. Daher ist es wichtig zu wissen, welche Möglichkeiten Microsoft Access für den Export der Daten aus den Tabellen der Datenbank zur Verfügung stellt. In diesem Beitrag schauen wir uns daher die in Access eingebauten Möglichkeiten an, also solche, die ohne die Einbindung zusätzlicher Bibliotheken wie etwa Microsoft XML, vX.0 auskommen. Dazu gehören sowohl die entsprechenden Export-Befehle der Benutzeroberfläche als auch einige VBA-Befehle der Access-Bibliothek.

Export per Benutzeroberfläche

Am einfachsten geht es natürlich über die Befehle der Benutzeroberfläche von Access. Wenn Sie im Ribbon zum Tab-Element Externe Daten wechseln, finden Sie dort im rechten Bereich eine Reihe von Befehlen für den Export in die verschiedenen Formate vor. Einer davon lautet XML-Datei (s. Bild 1).

Starten des XML-Exports per Ribbon-Befehl

Bild 1: Starten des XML-Exports per Ribbon-Befehl

Klicken Sie diesen Befehl beispielsweise an, während Sie die Tabelle tblArtikel (oder eine andere Tabelle) der aktuellen Datenbank im Navigationsbereich markiert haben, erscheint ein Dialog, der einen Dateinamen für die Export-Datei vorschlägt.

Dieser besteht aus dem Eigene Dokumente-Ordner des aktuellen Benutzerverzeichnisses und dem Namen der Tabelle mit der Dateiendung .xml (s. Bild 2). Diesen Pfad können Sie entweder durch direkte Eingabe per Tastatur ändern oder aber über einen Datei speichern-Dialog, den Sie mit einem Klick auf Durchsuchen… öffnen.

Erster Schritt des Export-Assistenten

Bild 2: Erster Schritt des Export-Assistenten

Im nächsten Schritt erscheint der Dialog aus Bild 3. Hier legen Sie fest, welche Dateien angelegt werden sollen:

Angabe weiterer Informationen

Bild 3: Angabe weiterer Informationen

  • Daten (XML): XML-Datei mit den eigentlichen Daten
  • Schema der Daten (XSD): Schema, das zur Prüfung der Validität der im XML-Dokument enthaltenen Daten verwendet wird
  • Präsentation Ihrer Daten (XSL): Schema, das zur Umformung der Daten herangezogen werden kann

Um die letzten beiden wollen wir uns in diesem Beitrag nicht kümmern. Aber vielleicht liefert die Schaltfläche Weitere… noch interessante Optionen Sie öffnet einen weiteren Dialog namens XML exportieren, der wie in Bild 4 aussieht.

Weitere Optionen für den XML-Export

Bild 4: Weitere Optionen für den XML-Export

Hier finden Sie für jede der drei in der vorherigen Abbildung möglichen Exportdateien einen Registerreiter mit weiteren Einstellungen. Für uns ist nur die erste Registerkarte interessant, da wir ja keine XSL- oder XSD-Datei exportieren wollen, sondern nur die reine Daten-Datei.

Im TreeView-Steuerelement mit der überschrift Zu exportierende Daten finden Sie ganz oben die Tabelle, die wir beim Aufrufen des Ribbon-Befehls Externe Daten|Exportieren|XML-Datei markiert hatten. Unterhalb davon finden wir zwei verschiedene Arten von Einträgen:

  • Namen von Tabellen, in diesem Fall tblBestelldetails, und
  • den Eintrag Daten nachschlagen mit weiteren untergeordneten Tabellennamen, zum Beispiel tblKategorien oder tblLieferanten.

Die unter Daten nachschlagen aufgeführten Tabellen sind solche Tabellen, die von der Haupttabelle tblArtikel aus per Fremdschlüsselfeld referenziert werden, aus der also Werte für den aktuellen Datensatz der Tabelle tblArtikel ausgewählt werden können.

Bei den direkt untergeordneten Tabellen handelt es sich wiederum um Tabellen, die selbst ein Nachschlagefeld zur Auswahl eines Datensatzes der Haupttabelle enthalten. Im Beispiel der Bestellverwaltung handelt es sich dabei um die Tabelle tblBestelldetails, welche über die beiden Fremdschlüsselfelder ArtikelID und BestellungID die Zuordnung von Artikeln zu einer Bestellung vornimmt.

Zu exportierende Datensätze filtern

Neben der Auswahl der einzuschließenden Daten finden Sie rechts einen Bereich namens Zu exportierende Datensätze, der die folgenden drei Optionen bereitstellt:

  • Alle Datensätze
  • Bestehenden Filter anwenden
  • Aktueller Datensatz

Allerdings ist aktuell nur die erste Option aktiviert. Wie aber können wir die anderen beiden Optionen nutzen

Aktuellen Datensatz exportieren

Die Option Aktueller Datensatz ist relativ einfach verfügbar: Dazu öffnen Sie lediglich zuerst die Tabelle mit den zu exportierenden Daten, in diesem Beispiel tblArtikel, und klicken dann im Ribbon auf den Befehl Externe Daten|Exportieren|XML-Datei. Nach der Angabe der Zieldatei und einem Klick auf die OK-Schaltfläche im Dialog Exportieren – XML-Datei sowie auf die Schaltfläche Weitere… des dann erscheinenden Dialogs XML exportieren taucht der Dialog mit den weiteren Optionen wie in Bild 5 auf.

Export eines einzigen Datensatzes

Bild 5: Export eines einzigen Datensatzes

Hier finden Sie nun die aktivierte Option Aktueller Datensatz vor, die wir nun auswählen. Der Export eines einzigen Datensatzes einer Tabelle sollte eine überschaubare XML-Datei ergeben, anhand derer wir uns einen ersten überblick über das Ergebnis verschaffen können. Und wie erwartet sieht das Ergebnis wie folgt recht übersichtlich aus:

<xml version="1.0" encoding="UTF-8">
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2016-07-02T19:01:14">
<tblArtikel>
<ArtikelID>1</ArtikelID>
<Artikelname>Chai</Artikelname>
<LieferantID>1</LieferantID>
<KategorieID>1</KategorieID>
<Liefereinheit>10 Kartons x 20 Beutel</Liefereinheit>
<Einzelpreis>9</Einzelpreis>
<Lagerbestand>39</Lagerbestand>
<BestellteEinheiten>0</BestellteEinheiten>
<Mindestbestand>10</Mindestbestand>
<Auslaufartikel>0</Auslaufartikel>
</tblArtikel>
</dataroot>

Wir erhalten also neben dem Element dataroot für den aktuellen Datensatz ein Element des Typs tblArtikel, welches für jeden Feldnamen der Tabelle ein untergeordnetes Element enthält, dessen Wert dem Feldwert entspricht.

Gefilterte Datensätze exportieren

Aber vielleicht möchten Sie nicht nur einen bestimmten oder alle Datensätze exportieren, sondern die aktuell per Filter festgelegten Datensätze. Dazu legen wir für die in der Datenblattansicht geöffnete Tabelle einen Filter fest, der zum Beispiel nur die Datensätze liefert, deren Artikelname mit dem Buchstaben A beginnt (s. Bild 6).

Filtern der Datensätze der Tabelle tblArtikel

Bild 6: Filtern der Datensätze der Tabelle tblArtikel

Wenn Sie nun den Export in das XML-Format wie in den vorherigen Anläufen starten, erscheinen im Dialog alle Optionen unter Zu exportierende Datensätze aktiviert (s. Bild 7). Sie können nun also auch einen Export durchführen, der nur die mit A beginnenden Artikel enthält.

Ausgabe der Daten mit dem aktuell festgelegten Filter

Bild 7: Ausgabe der Daten mit dem aktuell festgelegten Filter

Weitere Daten hinzufügen: Lookupdaten

Nun wollen wir Lookupdaten hinzufügen, im Falle der Tabelle tblArtikel also die Daten der Tabellen tblKategorien und tblLieferanten. Nun wird es interessant, denn wir können dies auf mindestens zwei Arten erledigen: indem wir einfach die entsprechenden Werte wie den Kategorienamen oder den Lieferantennamen anstelle der Werte der Felder KategorieID oder LieferantID exportieren oder indem wir jeweils die kompletten verknüpften Datensätze der beiden Tabellen tblKategorien und tblLieferant zum Datensatz der Tabelle tblArtikel hinzufügen. Für den ersten Fall legen wir einfach eine Abfrage an, welche alle Felder der Tabelle tblArtikel mit Ausnahme von KategorieID und LieferantID enthält, dafür aber die Felder Kategoriename der Tabelle tblKategorien und Firma der Tabelle tblLieferanten. Die Abfrage sieht etwa wie in Bild 8 aus.

Abfrage für den Export der Daten

Bild 8: Abfrage für den Export der Daten

Um den Export zu starten, verwenden wir nun eine alternative Variante zum entsprechenden Ribbon-Eintrag: Diesmal klicken wir mit der rechten Maustaste auf den entsprechenden Eintrag im Navigationsbereich von Access, nämlich auf qryArtikelMitKategorieUndLieferant, und wählen aus dem Kontextmenü den Befehl Exportieren|XML-Datei aus (s. Bild 9).

Starten des Exports per Kontextmenü

Bild 9: Starten des Exports per Kontextmenü

Das Ergebnis sieht nun etwas anders aus, als wenn wir direkt die Tabelle tblArtikel exportieren. Diesmal erhalten wir statt der Elemente KategorieID und Lieferant-ID mit den Fremdschlüsselwerten die Elemente Kategoriename und Firma mit den entsprechenden Bezeichnungen (s. Listing 1).

<xml version="1.0" encoding="UTF-8">
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2016-07-03T12:38:01">
     <qryArtikelMitKategorieUndLieferant>
         <ArtikelID>1</ArtikelID>
         <Artikelname>Chai</Artikelname>
         <Firma>Exotic Liquids</Firma>
         <Kategoriename>Getränke</Kategoriename>
         <Liefereinheit>10 Kartons x 20 Beutel</Liefereinheit>
         <Einzelpreis>9</Einzelpreis>
         <Lagerbestand>39</Lagerbestand>
         <BestellteEinheiten>0</BestellteEinheiten>
         <Mindestbestand>10</Mindestbestand>
         <Auslaufartikel>0</Auslaufartikel>
     </qryArtikelMitKategorieUndLieferant>
     ...
</dataroot>

Listing 1: Export mit direkter Angabe der Kategorie und der Lieferanten-Firma

Für viele Fälle wird dies reichen, aber wenn Sie die Daten des XML-Dokuments beispielsweise in einer anderen Datenbank wieder einsetzen möchten, welche die gleiche Datenstruktur hat, benötigen Sie unter Umständen die Kategorien und Lieferanten inklusive Fremdschlüssel- und Primärschlüsselwerten.

Daten verknüpfter Tabellen exportieren

Wenn Sie die Daten verknüpfter Tabellen exportieren wollen, gibt es ebenfalls verschiedene Möglichkeiten. Die erste exportiert die Daten in verschachtelter Form, und zwar so, dass in der ersten Ebene etwa die Daten der Tabelle tblKategorien landen und in untergeordneten Elementen jeweils die Datensätze der Tabelle tblArtikel. Hierbei ist zu beachten, dass zu jedem Kategorien-Element immer das komplette zugeordnete Artikel-Element angelegt wird. Diese Variante funktioniert nur, wenn Sie den Export ausgehend von einer Tabelle starten, welche das an der Beziehung beteiligte Primärschlüsselfeld enthält und wenn die untergeordnete Tabelle das Fremdschlüsselfeld beisteuert. Wenn Sie also etwa die Artikel als übergeordnete Elemente und darunter die Kategorien und Lieferanten ausgeben wollen, gelingt dies über den Assistenten nicht. Dies können Sie allerdings per VBA erledigen, wie Sie im Beitrag XML-Export mit VBA (www.access-im-unternehmen.de/1046) erfahren werden.

Die zweite exportiert einfach die Inhalte der betroffenen Tabellen in das XML-Dokument, und zwar so, dass zuerst alle Artikeldatensätze in Form entsprechender Elemente und dann alle Kategorie- und Lieferantendatensätze in die XML-Datei geschrieben werden. Die Beziehung zueinander kann dann über die Fremdschlüsselfelder der Tabelle tblArtikel ermittelt werden, die ja ebenfalls in die Artikel-Elemente übernommen werden.

Diese Variante wird vom Assistenten automatisch gewählt, wenn die Tabelle, für die Sie den Export angestoßen haben, die Fremdschlüsselfelder zur Verknüpfung mit den Werten der Primärschlüsselfelder der verknüpften Tabellen enthält.

Wir schauen uns nun beide Varianten an.

Daten verschachtelt speichern

Bei der ersten Variante markieren wir die Tabelle tblKategorien und starten dann den Export entweder über den entsprechenden Ribbon- oder Kontextmenü-Eintrag. In den erweiterten Optionen wählen wir nun die Tabelle tblKategorien sowie die Tabellen tblArtikel aus (s. Bild 10).

Konfiguration für den Export als verschachtelte Elemente

Bild 10: Konfiguration für den Export als verschachtelte Elemente

Das Ergebnis sehen Sie in Listing 2. Es gibt zu jedem Datensatz der Tabelle tblKategorien ein Element namens tblKategorien, das die Felder und Feldwerte als Unterelemente enthält – also etwa KategorieID, Kategoriename et cetera. Das Element Abbildung enthält den Binärcode der im Anlagefeld Abbildung gespeicherten Bilddatei. Außerdem gibt es für jeden Eintrag der Tabelle tblArtikel, der mit der jeweiligen Kategorie verknüpft ist, ein Unterelement namens tblArtikel. Diese enthalten jeweils alle Felder der Tabelle tblArtikel samt Feldwert.

<xml version="1.0" encoding="UTF-8">
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2016-07-03T13:22:52">
     <tblKategorien>
         <KategorieID>1</KategorieID>
         <Kategoriename>Getränke</Kategoriename>
         <Beschreibung>Alkoholfreie Getränke, Kaffee, Tee, Bier</Beschreibung>
         <Abbildung>FRwvAAIAAAANAA4AFAAhAP////9CaXRtYXAgSW1hZ2UA...</Abbildung>
         <tblArtikel>
             <ArtikelID>1</ArtikelID>
             <Artikelname>Chai</Artikelname>
             <LieferantID>1</LieferantID>
             <KategorieID>1</KategorieID>
             ...
         </tblArtikel>
         <tblArtikel>
             <ArtikelID>2</ArtikelID>
             <Artikelname>Chang</Artikelname>
             ...
         </tblArtikel>
         ...
     </tblKategorien>
     <tblKategorien>
         <KategorieID>2</KategorieID>
         <Kategoriename>Gewürze</Kategoriename>
         ...
     </tblKategorien>
     ...
</dataroot>

Listing 2: Export verschachtelter Daten

Elementnamen anpassen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar