2016-12-21 12 views
0

Ich kann nur 1 Tabelle von Access mit diesem Code exportieren.Mehrere Tabellen aus Access in eine XML-Datei exportieren

Wie verwende ich das Format dieses Codes, aber mehrere Tabellen in eine XML-Datei exportieren?

Die XML-Ausgabe wird so aussehen.

<?xml version="1.0" encoding="UTF-8"?> 
<root>  
<charts>   
<chart key="testtable">    
<col>     
<string val="quarter"/>     
<string val="Q1"/>     
<string val="Q2"/>     
<string val="Q3"/>     
<string val="Q4"/>    
</col>    
<col>     
<string val="Group 1"/>     
<double val="100.1"/>     
<double val="200.6"/>     
<double val="250"/>     
<double val="300.8"/>    
</col>    
<col>     
<string val="Group 2"/>     
<double val="250"/>     
<double val="100.1"/>     
<double val="300.8"/>     
<double val="200.6"/>    
</col>    
<col>     
<string val="growth"/>     
<double val="22.5"/>     
<double val="-5.1"/>     
<double val="3.8"/>     
<double val="50.6"/>    
</col>   
</chart>   
<chart key="halfyear">    
<col>     
<string val="Period"/>     
<string val="spring"/>     
<string val="winter"/>    
</col>    
<col>     
<string val="numbers"/>     
<double val="50"/>     
<double val="150"/>    
</col>    
<col>     
<string val="price"/>     
<double val="8.3"/>     
<double val="1.2"/>    
</col>    
<col>      
<string val="difference"/>     
<double val="0"/>     
<double val="-7"/>    
</col>   
</chart>  
</charts> 
</root> 

Dies ist, wie die Tabelle aussehen soll:

table

+0

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? –

+0

sind die Tabellen die gleiche Größe (Breite), die Sie eine UNION-Abfrage verwenden könnten, mit einem "Tabellenname" -Zusatz? –

+0

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

Antwort

0

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 
Verwandte Themen