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 Prozedur, die in einem globalen Modul gespeichert wird.

Public Sub XMLAnzeigen(Dateipfad As String, Optional Separator As String = vbTab)
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   'Late Binding: Kein Verweis auf Microsoft ActiveX Data Objekts x.x Library (ADO) notwendig.
 
   Const adOpenStatic     As Long = 3
   Const adLockOptimistic As Long = 3
   Const adCmdFile        As Long = 256
 
   Dim buf As String
   Dim i   As Long
   Dim j   As Long
 
   With CreateObject("ADODB.Recordset")
 
      .Open Source:=Dateipfad, _
            CursorType:=adOpenStatic, _
            LockType:=adLockOptimistic, _
            Options:=adCmdFile
 
      'Feldnamen im Direktfenster waagrecht auflisten
      For i = 0 To .Fields.Count - 1
         buf = buf & .Fields(i).Name & Separator
      Next
      buf = Left$(buf, Len(buf) - Len(Separator))
 
      Debug.Print "Feldnamen:", buf
      buf = vbNullString
 
      'Feldinhalte im Direktfenster waagrecht auflisten
      Do Until .EOF
         j = j + 1
 
         For i = 0 To .Fields.Count - 1
            buf = buf & .Fields(i) & Separator
         Next
         buf = Left$(buf, Len(buf) - Len(Separator))
 
         Debug.Print "Record " & Format$(j, "000:"), buf
         buf = vbNullString
 
         .MoveNext
      Loop
 
      'rs schließen und Speicher freigeben
      .Close
   End With
End Sub

Aufruf

Der Inhalt der XML-Datei wird im Direktfenster angezeigt.

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


Wiki hinweis.png

Hinweis:

  • Mit obiger Prozedur können nur XML-Dateien angezeigt werden, die über ein ADODB-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 ADODB-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(Tabellenname As String, Dateipfad As String)
 
   'Late Binding: Kein Verweis auf Microsoft ActiveX Data Objekts x.x Library (ADO) notwendig.
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Const adOpenStatic     As Long = 3
   Const adLockOptimistic As Long = 3
   Const adPersistXML     As Long = 1
 
   With CreateObject("ADODB.Recordset")
 
      .Open "SELECT * FROM " & Tabellenname, _
            CurrentProject.Connection, _
            adOpenStatic, _
            adLockOptimistic
 
      On Error Resume Next
      Kill Dateipfad
      On Error GoTo 0
      .Save Dateipfad, adPersistXML
 
      'rs schließen und Speicher freigeben
      .Close
   End With
End Sub

Aufruf

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

Weblinks