HINWEIS
Abbildung 12.65 XML-Baum des Beispiels
Sicher werden Ihre Versuche mit dem Programm durch reichlich Fehlermeldungen unterbrochen, wenn kein
aktives Element bzw. kein gültiges Objekt mehr vorhanden ist. Wir haben absichtlich darauf verzichtet, alle eventuellen Fehler-
fälle abzufangen, da Sie auf diese Weise viel schneller ein Gefühl für die Navigation innerhalb des XML-Baumes bekommen.
Über die Abfrage »... Is Nothing« können Sie selbst zusätzliche Fehlerprüfungen einführen.
ADO-XML-Streams nachbearbeiten
ADO-Recordset; DOMDocument-, IXMLDOMNode,-, IXMLDOMAttribute-Objekt; createAttribute-, set-
NamedItem-, getNamedItem-Methode;
Ein absolutes Novum von ADO ist die Möglichkeit zum Erzeugen ungebundener Recordsets, d.h., eine
Datenbank muss nicht in jedem Fall vorhanden sein. Das böse Erwachen folgt allerdings, wenn Sie ver-
suchen, dieses Recordset an die Steuerelemente eines Formulars zu binden, denn ein sinnvolles Bearbeiten
und Navigieren ist nicht möglich.
Die Lösung: Sie müssen per DOM direkt zusätzliche Attribute in die XML-Deklaration einfügen
1
, damit
Acces mit den XML-Daten des Recordsets sinnvoll umgehen kann.
Oberfläche
Erstellen Sie zunächst ein neues Formular und stellen Sie im Eigenschaftenblatt als Standardansicht den
Wert Endlosformular ein.
Außerdem werden drei Befehlsschaltflächen benötigt (siehe Laufzeitansicht am Schluss).
1
Wie gut, dass wir uns intensiv mit den XML-Grundlagen beschäftigt haben ...
819
Praxisbeispiele
HINWEIS
Kapitel 12: XML in Theorie und Praxis
Quelltext
Richten Sie Verweise auf die Microsoft ActiveX Data Objects 2.x Library und auf die Microsoft XML-Library
(msxml6.dll) ein.
Beim Laden des Formulars wird ein ADO-Recordset-Objekt mit der gewünschten Struktur erzeugt und mit
dem Formular verbunden:
Private rs As ADODB.Recordset
Private fName As String
Private Sub Form_Load()
fName = CurrentProject.Path & "\Test.xml"
Set rs = New Recordset
rs.Fields.Append "Nachname", adBSTR
rs.Fields.Append "Geburtsdatum", adDate
rs.Fields.Append "Telefon", adInteger
rs.Open
Set Me.Recordset = changeRS(rs) ' sonst kein Anbinden der Controls mit Editieren möglich!
Text1.ControlSource = "Nachname"
Text2.ControlSource = "Geburtsdatum"
Text3.ControlSource = "Telefon"
End Sub
Die Funktion
changeRS
verwandelt das übergebene geöffnete ADO-Recordset in ein editierbares ADO-
Recordset, welches direkt an ein Formular gebunden werden kann (für das Verständnis sind XML-Kenntnis-
se unabdingbar):
Public Function changeRS(rs1 As ADODB.Recordset) As ADODB.Recordset
Dim xd As New MSXML2.DOMDocument
Dim xn As MSXML2.IXMLDOMNode
Dim xa As MSXML2.IXMLDOMAttribute
Das übergebene ADO-Recordset wird zwecks Bearbeitung direkt in das XML-Dokument geladen:
rs1.Save xd, adPersistXML
Das XML-Dokument wird bearbeitet (alle Knoten durchlaufen, Attribute setzen):
For Each xn In xd.getElementsByTagName("s:AttributeType")
Set xa = xd.createAttribute("rs:basetable")
xa.Value = "T"
xn.Attributes.setNamedItem xa
Set xa = xd.createAttribute("rs:basecolumn")
xa.Value = xn.Attributes.getNamedItem("name").nodeValue
xn.Attributes.setNamedItem xa
Next xn
Set xa = Nothing
Set xn = Nothing
Rückgabe des neuen ADO-Recordsets (aus geändertem XML-Dokument laden):
Set changeRS = New ADODB.Recordset
changeRS.Open xd
End Function
820
Im Folgenden wird mittels
Open
-Methode eine Datei geöffnet und dem
Recordset
-Objekt zugewiesen. Ist die
Datei noch nicht vorhanden (z.B. beim erstmaligen Programmstart), wird sie neu angelegt:
Private Sub Befehl1_Click() ' Datei öffnen
rs.Close
rs.Open fName
Set Me.Recordset = rs
End Sub
Die
Save
-Methode erlaubt kein Überschreiben einer bereits vorhandenen Datei. Aus diesem Grund lässt sich
leider das doch ziemlich »brutale«
Kill
nicht vermeiden:
Private Sub Befehl2_Click() ' Datei speichern
If FileExist(fName) Then Kill fName
rs.Save fName, adPersistXML ' Abspeichern im XML-Format
End Sub
Test
Nach dem erstmaligen Programmstart sollten Sie zunächst einige Datensätze hinzufügen. Nachdem Sie auf
»Datei speichern« geklickt haben, werden Sie eine neue Datei Test.xml im Anwendungsverzeichnis ent-
decken. Nach Beenden von Access und erneutem Start können Sie die Anzeige der Datensätze wieder
herstellen.
Abbildung 12.66 Experimentieren mit ungebundenem
ADO-Recordset
Bemerkungen
Die gewählten Datentypen beschnken die Eingabe (z.B. ist Integer bei Telefonnummern natürlich ab-
solut praxisfremd, aber hier soll es nur um die Demonstration des Prinzips gehen).
Die Möglichkeit, ein ADO-Recordset als Datei auf die Festplatte auszulagern, bietet sich natürlich nicht
nur bei ungebundenen, sondern auch bei »echten« Recordsets an, was sicherlich für viele Anwendungs-
zwecke interessant sein dürfte.
821
Praxisbeispiele

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.