Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Einlesen einer xml-Datei

Begonnen von hajott, März 01, 2026, 14:56:47

⏪ vorheriges - nächstes ⏩

hajott

Hallo Wissende,

ich möchte regelmäßig Daten in Access einlesen, die ich aus einer xml-Datei erhalte. Die Importfunktion von Access bringt mir nur leere Felder. Laut meiner Internetrecherche liegt das wohl daran, dass ich Daten auf drei Ebenen habe. Die ersten drei Zeilen sehen beispielhaft so aus:
<ebene1 var1="hallo" var2="3" var4="49.73" usq. />
   <ebene2 var5="3" var6="q" usw />
       <ebene3 var7="r" usw />

Ich habe es geschafft, ein Programm zu bauen, welches die Zeilen ausliest, die Feldnamen und Variablen sortiert, eine ID dazugibt und mit einer INSERT INTO in vorbereitete Tabellen schreibt. Dazu ist noch zu sagen, dass einige Variablen in einigen Zeilen nicht vorkommen (wie in ebene1 var3), deshalb ist die Zuordnung zum Feldnamen erfdorderlich.

Wie gesagt, es klappt, dauert aber äußerst lange. Wie ich am fröhlichen Blinken der Statusbar sehe, läuft (logischerweise) jede Abfrage einzeln. Neben der Wartezeit stört mich, dass die Lösung vielleicht doch nicht die beste ist, zumal ich die Daten nach dem Import auch noch überarbeiten muss.

Als erstes fiel mir ein: Recordset beschreiben und einmalig in die Tabelle übergeben. Das würde ich sogar hinbekommen, aber mein Test scheiterte schon am "Dim objRs As New ADODB.Recordset", was er nicht kennt.
Aus meiner Zeit als ich beruflich ein bisschen an Access gebaut habe, weiß ich, dass man ggf.  Add-Ins einschalten muss. Das Fenster ist bei mir aber leer ! Wisst ihr, woran das liegt oder was man daran machen könnte? (Falls das der Grund ist: ich habe kein natives Windows, sondern arbeite mit Mac und Parallels)

Als zweites wollte ich mal fragen: Gibt es nicht doch eine elegantere Möglichkeit, eine dreistufige XML einzulesen?`(Falls es hilft: Dieselben Daten würden auch als JSON vorliegen)

Vielen Dank im voraus für alle Tipps

Hans-Jürgen

Knobbi38

#1
Hallo Hans-Jürgen,

es gibt sicherlich einige verschiedene Methoden, XML-Daten in Access zu importieren, allen vorweg schlichtweg mit dem Assistenten für "externe Daten". Die Schritte kann man dann Speichern und dann immer wieder neu anwenden. Selbst eine Transformation per xslt wäre möglich, wenn die Struktur der XML-Datei nicht passend ist.

Eine andere Variante wäre, da ja eine XML-Datei nichts anderes als eine Textdatei ist, diese mit einer Komponente oder einfach per Code zu parsen und dann die Daten an eine Tabelle anzufügen.

Leider reichen deine Informationen (noch) nicht aus, um wirklich zielführende Hinweise zu geben.

Zum Thema JSON:
Da Access das nicht unterstützt, müsste man das selber programmieren. Sicherlich kann man sich dafür dann einiger vorhanden Bibliotheken bedienen, so dass man nicht alles neu erfinden muss. Einfach auf Github mal nach VBA + JSON suchen.

Knobbi38

PS:
Hast du mal hier im Forum nach dem Begriff "XML" gesucht?



hajott

Hallo Knobbi38,

das Parsing per Code mache ich ja gerade, ist aber langsam, da jede der zigtausend Zeilen in einen einzelnen INSERT INTO umgesetzt wurd

Meine Hoffnung war, dass man die Daten vielleicht ib eiben Recordset schreiben und dort auch noch anpassen kann. Erst am Ende wird das in eine Tabelle übertragen.

Aber ich scheitere daran, das Recordset überhaupt zu definieren (siehe Frage), gibts  dazu vielleicht noch was zu wissen?

Vieleb Dank

Hans-Jürgeb

Knobbi38

Hallo,

Massenverarbeitung mit INSERT INTO ist sicherlich nicht die schnellste Methode, zumal wenn keine Query dafür verwendet und der String jedes mal neu erzeugt wird.

Auch muss kein Recordset definiert werden, sondern man öffnet eine Recordset für die Tabelle und fügt mit AddNew neue DS hinzu.

Bei Verwendung von ADO geht das z.B. auch mit UpdateBatch.

Knobbi38

Bitsqueezer

Hallo,

für die Verwendung von ADO mußt Du kein Addon installieren, sondern im VBA-Editor eine Referenz setzen auf die ADO Library. Das ist die "Microsoft ActiveX Data Objects 6.x" (sollte i.d.R. 6.1 sein).

Ein Objekt sollte man nicht mit "New" deklarieren, besser ist, Deklaration und Initialisierung zu trennen. Damit kann es auch per Set auf Nothing gesetzt werden.

Für XML gibt es von MS die XML Library, die Du zur Verarbeitung verwenden kannst. Aktuell "Microsoft XML v6.0", ebenfalls in den Referenzen.
Hier ist ein Tutorial zur Verwendung:
https://activevb.de/tutorials/tut_msxml/msxml.html

Wenn es JSON sein soll, findest Du hier ein Projekt mit einem JSON-Parser:
https://github.com/VBA-tools/VBA-JSON/tree/master

Da Du keinen Code zeigst, kann man nicht sagen, inwiefern man das verbessern könnte.

Gruß

Christian