VBA Tipp: XML Einlesen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte den Inhalt einer Tabelle oder Abfrage, die mithilfe eines ADO-Recordsets in einer XML-Datei gespeichert wurde, wieder in ein ADO-Recordset einlesen, und die Feldnamen und Feldinhalte im Direktfenster ausgeben lassen.

Lösung

Das geht mit folgender Sub-Prozedur, die in einem globalen Modul gespeichert wird.

Public Sub XMLAnzeigen(ByVal Dateipfad As String)
 
 'Ein Verweis auf Microsoft ActiveX Data Objekts x.x Library (ADO) muss gesetzt sein.
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim rs        As New ADODB.Recordset
 Dim i         As Long
 Dim j         As Long
 Dim strFelder As String
 Dim anzFelder As Long
 
 rs.Open Source:=Dateipfad, _
         CursorType:=adOpenStatic, _
         LockType:=adLockOptimistic, _
         Options:=adCmdFile
 
 anzFelder = rs.Fields.Count - 1
 
 'Feldnamen im Direktfenster waagrecht auflisten
 For i = 0 To anzFelder
   strFelder = strFelder & rs.Fields(i).Name & "|"
 Next i
 Debug.Print "Feldnamen: " & strFelder
 strFelder = ""
 
 'Feldinhalte im Direktfenster waagrecht auflisten
 Do While Not rs.EOF
 
   j = j + 1
 
   For i = 0 To anzFelder
 
     If i = anzFelder Then
       Debug.Print "Datensatz " & j & ": " & strFelder
       strFelder = ""
     Else
       strFelder = strFelder & rs.Fields(i) & "|"
     End If
 
   Next i
 
   rs.MoveNext
 Loop
 
 'rs schließen und Speicher freigeben
 If Not rs Is Nothing Then rs.Close: Set rs = Nothing
 
End Sub

Aufruf

Der Inhalt der XML-Datei wird im Direktenster angezeigt.

 Call XMLAnzeigen(CurrentProject.Path & "\Lieferanten.xml")


Wiki hinweis.png

Hinweis:

  • Mit obiger Prozedur können nur XML-Dateien angezeigt / aufgelistet werden, die über ein ADO-Recordset gefüllt wurden.
  • Beliebige XML-Dateien aus anderen Quellen können damit nicht angezeigt werden, und erzeugen eine Fehlermeldung: "Die Quelle XML ist unvollständig oder ungültig".


XML-Datei erzeugen

Mit folgender Prozedur kann eine XML-Datei mittels eines ADO-Recordsets erzeugt, und mit dem Inhalt einer Tabelle (z.B. die Tabelle Lieferanten aus der Nordwind-Datenbank) gefüllt werden. Falls die XML-Datei bereits existiert, wird ein Fehler ausgelöst.

Public Sub XMLErzeugen(ByVal Tabellenname As String, ByVal Dateipfad As String)
 
 'Ein Verweis auf Microsoft ActiveX Data Objekts x.x Library (ADO) muss gesetzt sein.
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim rs As New ADODB.Recordset
 
 rs.Open "SELECT * FROM " & Tabellenname, _
         CurrentProject.Connection, _
         adOpenDynamic, _
         adLockOptimistic
 
 rs.Save Dateipfad, adPersistXML
 
 'rs schließen und Speicher freigeben
 If Not rs Is Nothing Then rs.Close: Set rs = Nothing
 
End Sub

Aufruf

 Call XMLErzeugen("Lieferanten", CurrentProject.Path & "\Lieferanten.xml")


Web-Links