Betrachten durch alle Tabellen der Datenbank Looping mit der TableDefs Sammlung, iterativ Ihre ExportXML()
Funktion mit übergebenen Parametern in aufrufen. Und erstellen Sie gleichzeitig ein spezielles XSLT-Skript, um später alle resultierenden XML-Dateien in eine Master-Datei zu binden.
Als Information ist XSLT eine spezielle Sprache zum Transformieren von XML-Dateien und kann eine externe XML-Datei mit der document()
-Funktion importieren. Die XSLT muss auf der Festplatte gespeichert und nicht im Speicher verwendet werden, da sie das Verzeichnis für andere XML-Dateien lesen muss.
XSLT Modell
(Skript, das dynamisch in Code unten gebaut wird, bemerken zuerst Table1.xml nicht erklärt, da es die ursprüngliche Transformation Quelle in VBA ist)
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<root>
<xsl:copy-of select="*"/>
<xsl:copy-of select="document('Table2.xml')/root/*"/>
<xsl:copy-of select="document('Table3.xml')/root/*"/>
<xsl:copy-of select="document('Table4.xml')/root/*"/>
...
<xsl:copy-of select="document('Tabl50.xml')/root/*"/>
</root>
</xsl:template>
</xsl:transform
VBA(mit Originalfunktion mit Parametern des Tabellennamens)
Public Function ExportXML(tblname As String)
'...same exact code with following line changes...
strSQL = "select * from [" & tblname & "]"
'...
path = Application.CurrentProject.Path & "\" & tblname & ".xml"
' REMOVE SUCCESS MSGBOX
End Function
Public Sub MasterXMLFile()
On Error GoTo ErrHandle
' ADD VBA REFERENCE: MSXML, v6.0
Dim xmlDoc As New MSXML2.DOMDocument60, xslDoc As New MSXML2.DOMDocument60, newDoc As New MSXML2.DOMDocument60
Dim xslstr As String, firstXML As String
Dim tbl As TableDef
Dim i As Integer: i = 1
' START XSLT
xslstr = "<xsl:transform xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">" _
& " <xsl:output version=""1.0"" encoding=""UTF-8"" indent=""yes"" method=""xml""/>" _
& " <xsl:strip-space elements=""*""/>" _
& " " _
& " <xsl:template match=""/"">" _
& " <root>" _
& " <xsl:copy-of select=""*""/>"
For Each tbl In CurrentDb.TableDefs
If i = 1 Then firstXML = tbl.Name
' CALL ORIGINAL FUNCTION
Call ExportXML(tbl.Name)
' CONCATENATE XSLT STRING
xslstr = xslstr & " <xsl:copy-of select=""document('" & tbl.Name & ".xml')/root/*""/>"
i = i + 1
Next tbl
' END XSLT
xslstr = xslstr & " </root>" _
& " </xsl:template>" _
& " " _
& "</xsl:transform>"
xslDoc.loadXML xslstr
xslDoc.Save Application.CurrentProject.Path & "\MasterFile.xsl"
' LOAD FIRST XML AND XSL
xmlDoc.Load Application.CurrentProject.Path & "\" & firstXML & ".xml"
Set xslDoc = New MSXML2.DOMDocument60
xslDoc.Load Application.CurrentProject.Path & "\MasterFile.xsl"
xslDoc.async = False
xslDoc.SetProperty "AllowDocumentFunction", True
' TRANSFORM SOURCE TO NEW DOCUMENT
xmlDoc.transformNodeToObject xslDoc, newDoc
' SAVE TRANSFORMED RESULT
newDoc.Save Application.CurrentProject.Path & "\MasterFile.xml"
Set xmlDoc = Nothing: Set xslDoc = Nothing: Set newDoc = Nothing
MsgBox "Succesfully built Master database XML!", vbDefaultButton1, "Export"
Exit Sub
ErrHandle:
MsgBox Err.Number & " - " & Err.Description, vbCritical, "RUNTIME ERROR"
Set xmlDoc = Nothing: Set xslDoc = Nothing: Set newDoc = Nothing
Exit Sub
End Sub
können Sie dies auch mit Access-VBA markieren? Kannst du es nicht einfach parametrisieren? Machen Sie Instanzen von "TestTable" eine Variable, die Sie als Parameter übergeben? –
sind die Tabellen die gleiche Größe (Breite), die Sie eine UNION-Abfrage verwenden könnten, mit einem "Tabellenname" -Zusatz? –
Sie müssen einige XML-Daten anzeigen und erklären, wie Sie die verschachtelte Baumstruktur von XML maintans integrieren möchten. Wo sollten Tabellen eingefügt werden? – Parfait