Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
285329 Access Does Not Import Attribute-Centric XML

Fortgeschritten: Erfordert Fachkenntnisse in den Bereichen Codierung und Interoperabilität sowie Mehrbenutzerfähigkeiten.

Dieser Artikel bezieht sich auf Microsoft Access-Datenbanken (.mdb) sowie auf Microsoft Access-Projekte (.adp).

Problembeschreibung

Wenn Sie ein XML-Dokument importieren, wird mindestens eine leere Tabelle importiert, oder es werden nicht alle Daten importiert. Je nach Struktur des XML-Dokuments kann es sein, dass mehr als eine Tabelle importiert wird.

Ursache

Wenn eine leere Tabelle importiert wird, so weist das in der Regel darauf hin, dass die Daten des XML-Dokuments attributzentriert sind. Microsoft Access unterstützt nur elementzentriertes XML. XML, das auf ADO-Recordsets basiert, wird attributzentriert erzeugt.

Lösung

Dieser Artikel erläutert, wie Sie XML-Daten importieren, die durch Speicherung eines ADO-Recordsets im XML-Format erzeugt wurden. Der in diesem Artikel beschriebene Transform gilt für das aus ADO erzeugte XML-Format.

Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen. Die Microsoft Supportmitarbeiter können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind. Wenn Sie über begrenzte Programmiererfahrung verfügen, wenden Sie sich an einen von Microsoft zertifizierten Partner. Weitere Informationen über von Microsoft zertifizierte Partner finden Sie auf der folgenden Seite im World Wide Web:

http://www.microsoft.com/partner/referral/Weitere Informationen zur Kontaktaufnahme mit Microsoft und den verfügbaren Supportoptionen finden Sie auf der folgenden Microsoft-Website:

http://support.microsoft.com/default.aspx?scid=fh;DE;CNTACTMSSie müssen zunächst eine XML-Transformation (XSLT) für das Quelldokument anlegen und anwenden, um attributzentriertes XML in Access zu importieren. Bei diesem Vorgang wird ein neues XML-Dokument erzeugt, das elementzentriert ist und in Access importiert werden kann.

XML-Dokument aus ADO erstellen

  1. Erstellen Sie eine neue leere Datenbank, und nennen Sie sie "ImportADOXML.mdb".

  2. Klicken Sie im Menü Einfügen auf Modul.

  3. Geben Sie im Visual Basic-Editor im neuen Modul den folgenden Code ein, oder kopieren Sie ihn dorthin:

    Sub CreateADOXML()
    'Persists an ADO recordset to XML
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    'Open an ADO Connection object
    'If the path to Northwind differs on your machine, you will need to
    'adjust the Data Source property accordingly.
    Set cn = New ADODB.Connection
    With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=C:\Program Files\Microsoft " & _
    "Office\Office10\Samples\Northwind.mdb"
    .Open
    End With

    'Open an ADO Recordset
    Set rs = New ADODB.Recordset
    With rs
    Set .ActiveConnection = cn
    .Source = "SELECT * FROM Customers WHERE Country='UK'"
    .CursorLocation = adUseServer
    .CursorType = adOpenForwardOnly
    .LockType = adLockReadOnly
    .Open
    'persist the recordset to XML
    .Save "C:\ado_customersUK.xml", adPersistXML
    .Close
    End With

    'Cleanup
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
    End Sub
  4. Speichern Sie das Modul als basCreateADOXML.

  5. Klicken Sie im Visual Basic Editor im Menü Ansicht auf Direktfenster, um das Direktfenster zu öffnen.

  6. Geben Sie den folgenden Code in das Direktfenster ein, und drücken Sie dann die [EINGABETASTE]:

     CreateADOXML 

XSL-Transform erstellen

Da die von ADO definierten Namensräume nicht von Access erkannt werden, definiert der folgende Transform diese Namensräume, schließt sie jedoch aus der resultierenden Ausgabe aus.

  1. Starten Sie den Editor, und geben Sie dann den folgenden XSLT-Code ein:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:rs="urn:schemas-microsoft-com:rowset"
    exclude-result-prefixes="rs">

    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
    <!-- root element for the XML output -->
    <rootElement xmlns:z="#RowsetSchema" xsl:exclude-result-prefixes="z">

    <!-- for each z:row element in the ADO output -->
    <xsl:for-each select="/xml/rs:data/z:row">

    <!--
    This will be used for the table name imported into Access.
    Change this name to suit your needs.
    -->
    <TableName>
    <!--
    for each attribute of the z:row element in the ADO XML document
    -->
    <xsl:for-each select="@*">

    <!--
    dynamically create elements and fill with attribute
    value using the XPath name() function
    -->
    <xsl:element name="{name()}">
    <xsl:value-of select="."/>
    </xsl:element>

    </xsl:for-each>
    </TableName>

    </xsl:for-each>
    </rootElement>
    </xsl:template>
    </xsl:stylesheet>

  2. Speichern Sie das Dokument als "ADOXMLToAccess.xsl" in dem Ordner, in dem Sie die Datenbank "ImportADOXML.mdb" gespeichert haben.

Transform anwenden und importieren

Sie müssen einen XSLT-Prozessor wie z.B. den Microsoft MSXML3-Prozessor verwenden, der mit Microsoft Office XP installiert wird, um den XSL-Transform anzuwenden. In den folgenden Schritten wird das XML Document Object Model verwendet, um den zuvor erstellten Transform auf ein ADO-XML-Dokument anzuwenden und ihn in Access zu importieren.

Hinweis: Der Beispielcode in diesem Artikel verwendet das XML Document Object Model. Sie müssen einen Verweis auf die Microsoft XML 3.0-Bibliothek anlegen, damit dieser Code ordnungsgemäß ausgeführt wird. Klicken Sie hierzu im Visual Basic Editor im Menü Extras auf Informationsquellen, und stellen Sie sicher, dass das Kontrollkästchen für Microsoft XML, v3.0 aktiviert ist.

  1. Starten Sie Microsoft Access, und öffnen Sie die Datenbank "ImportADOXML.mdb", die Sie zuvor erstellt haben.

  2. Klicken Sie im Datenbankfenster unter Objekte auf Module, und klicken Sie dann auf Neu.

  3. Geben Sie im Visual Basic-Editor im neuen Modul den folgenden Code ein, oder kopieren Sie ihn dorthin:

     Sub ImportXMLFromADO()          'Uses the XML DOM to transform XML from ADO     'to element-centric XML and imports into Access     Dim domIn As DOMDocument30     Dim domOut As DOMDocument30     Dim domStylesheet As DOMDocument30          Set domIn = New DOMDocument30          domIn.async = False          'Open the ADO xml document     If domIn.Load("C:\ado_customersUK.xml") Then              'Load the stylesheet         'In this example you will need to change <PathToStylesheet> to         'the actual path where you stored the ADOXMLToAccess.xsl file.             Set domStylesheet = New DOMDocument30         domStylesheet.Load "<PathToStylesheet>\ADOXMLToAccess.xsl"                  'Apply the transform         If Not domStylesheet Is Nothing Then             Set domOut = New DOMDocument30             domIn.transformNodeToObject domStylesheet, domOut                          'Save the output             domOut.Save "c:\customersUK.xml"                          'Import the saved document into Access             Application.ImportXML "c:\customersUK.xml"         End If     End If          'Cleanup     Set domIn = Nothing     Set domOut = Nothing     Set domStylesheet = Nothing          MsgBox "done!", , "ImportXMLFromADO" End Sub 
  4. Klicken Sie im Visual Basic-Editor im Menü Ansicht auf Direktfenster, um das Direktfenster zu öffnen.

  5. Geben Sie den folgenden Code in das Direktfenster ein, und drücken Sie dann die [EINGABETASTE]:

    ImportXMLFromADO

    Beachten Sie, dass eine Tabelle, die UK-Kunden enthält und den Namen hat, den Sie für <Tabellenname> angegeben haben, in Access importiert wird. Sie können das elementzentrierte XML-Dokument löschen, das bei der Transformation erzeugt wird.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Informationsquellen

Weitere Informationen zur Speicherung von ADO-Recordsets in XML finden Sie auf folgender Microsoft-Website:

Persisting Records in XML Format

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Übersetzungsqualität?
Was hat Ihre Erfahrung beeinflusst?

Vielen Dank für Ihr Feedback!

×