Access-o-Mania

Access-Forum => Access Programmierung => Thema gestartet von: sellrich am November 01, 2018, 15:29:40

Titel: XML Export von Tabellen via VBA
Beitrag von: sellrich am November 01, 2018, 15:29:40
Hallo ihr Lieben,

momentaner Ist-Zustand :
Ich exportiere 3 Tabellen in ein XML-File mit Hilfe von VBA.

Public Sub Export_XML()
Dim objAdditionalData As AdditionalData
Set objAdditionalData = Application.CreateAdditionalData

objAdditionalData.Add "Versanddaten"
objAdditionalData.Add "Positionsdaten"

Application.ExportXML acExportTable, "Auftragskopfdaten", CurrentProject.Path & "\MVP_Export.xml", _
AdditionalData:=objAdditionalData
End Sub

Das konnte ich mit viel Google, bereits genutzte Themen und Handbücher herausfinden.
Jetzt allerdings stoße ich sowohl mit meinen Ideen als auch mit meinen Recherchekünsten am meine Grenzen.

Ich möchte gerne, dass diese Abfrage immer nur einen Datensatz auswählt, exportiert und dann zu dem nächsten Datensatz springt und wieder ein neues XML-File exportiert. Das ganze solange (sprich soviele XML´s ausgeben) wie Datensätze in der Tabelle vorhanden sind.
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: Lachtaube am November 01, 2018, 15:49:01
Eine Parameterabfrage lässt sich mittels Funktion (siehe FAQ 3.15 (http://www.donkarl.com/FAQ/FAQ3TAbfragen.htm#3.15)) oder ab Access-Version 2010 mittels DoCmd.SetParameter() (https://docs.microsoft.com/en-us/office/vba/api/access.docmd.setparameter) in einer Schleife filtern. In dieser Schleife fütterst Du die Parameter aus einem vorher über Deine Tabelle geöffneten Recordset. Zusätzlich musst Du Dir etwas zu den Dateinamen einfallen lassen, die ja alle anders lauten müssten, wenn die Geschichte Sinn ergeben soll.
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: sellrich am November 05, 2018, 09:07:34
Hallo,

danke für die schnelle Antwort!

Zitat
Zusätzlich musst Du Dir etwas zu den Dateinamen einfallen lassen, die ja alle anders lauten müssten, wenn die Geschichte Sinn ergeben soll.

Das ist kein Problem. Der Dateiname wird mit ner Kundennummer + Uhrzeit/Datum versehen, damit jeder Export einzigartig ist.


Allerdings bin ich extremer Neueinsteiger und habe leider wenig Ahnung von Recordsets oder Parameterabfragen. Auch nach einigen Stunden Googlen mit deinen Schlüsselwörtern kam ich nicht weiter.
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: Lachtaube am November 05, 2018, 10:08:53
Hi,

hier ist ein mögliches Schema, um die Sache zu bewältigen:

'Statt die Tabelle 'Auftragskopfdaten' direkt zu verwenden, legst
'Du eine Auswahlabfrage über die 'Auftragskopfdaten' an, in der
'das Schüsselfeld als Bedingung mit einem Parameter in Form einer
'Funktion versehen ist.
'
'siehe. http://www.donkarl.com/FAQ/FAQ3TAbfragen.htm#3.15
'
'in einem globalen VBA-Modul:
Public pAkdId As Variant

Public Function GetAuftragsKopfDatenId()
   GetAuftragsKopfDatenId = pAKD_ID
End Function

'Annahme für den Schlüsselfeldnamen: akd_id <= Namen anpasesn
'als Parameter verwende ich eine globale Funktion, die sich den
'Rückgabewert aus einer globalen Variablen (pAkdId) zieht.
'
'eine Abfrage 'qryAuftragsKopfDaten' könnte dann so aussehen
'
'SELECT a.*
'FROM   Auftragskopfdaten AS a
'WHERE  a.akd_id = GetAuftragsKopfDatenId()
'
Public Sub Export_XML()
   'nur das Schlüsselfeld in Auftragskopfdaten auswählen
   Const QRY As String = "SELECT akd_id FROM Auftragskopfdaten"

   Dim ExportPath As String
   Dim ad         As AdditionalData

   ExportPath = CurrentProject.Path & "\" & Format$(Now(), "yyyymmddhhnnss_")

   Set ad = CreateAdditionalData
   ad.Add "Versanddaten"
   ad.Add "Positionsdaten"

   'ein Recordset über die Abfrage in QRY erzeugen
   With DBEngine(0)(0).OpenRecordset(QRY, dbOpenSnapshot)
      'bis das Ende des Recordsets erreicht ist
      Do Until EOF
         'die Variable befüllen
         pAKD_ID = !akd_id

         ExportXML acExportTable, "qryAuftragskopfdaten", _
                   ExportPath & !akd_id & ".xml", _
                   AdditionalData:=objAdditionalData
         'zum nächsten Datensatz gehen
         .MoveNext
      Loop
      'Recordset schließen
      .Close
   End With
End Sub
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: sellrich am November 05, 2018, 13:53:39
Vielen Dank soweit ! Die Abfrage habe ich zum Laufen bekommen. Kann es sein das hier :
Zitat
'siehe. http://www.donkarl.com/FAQ/FAQ3TAbfragen.htm#3.15
'
'in einem globalen VBA-Modul:
Public pAkdId As Variant

Public Function GetAuftragsKopfDatenId()
   GetAuftragsKopfDatenId = pAKD_ID
End Function

Public pAkdId eigentlich pAkD_ID sein soll?

Des Weiteren bekomme ich bei der Durchführung von Code Nr. 2 (Public Sub Export_XML() )folgendes angezeigt :
"Fehler beim Kompilieren:
Argument ist nicht optional"
Der Fehler taucht direkt beim ausführen aus. Auch bei Einzelschritten beim ersten F8 kommt der Fehler.

Hab es erst mit umbenennen versucht- o.g Fehler.
Dann habe ich habe meine Tabelle entsprechend den Namen in der Abfrage angepasst. Ebenfalls der gleiche Fehler.

Code :
Public Sub Export_XML()
   Const QRY As String = "SELECT akd_id FROM Auftragskopfdaten"

   Dim ExportPath As String
   Dim ad         As AdditionalData

   ExportPath = CurrentProject.Path & "\" & Format$(Now(), "yyyymmddhhnnss_")

   Set ad = CreateAdditionalData
   ad.Add "Versanddaten"
   ad.Add "Positionsdaten"

   With DBEngine(0)(0).OpenRecordset(QRY, dbOpenSnapshot)
      'bis das Ende des Recordsets erreicht ist
      Do Until EOF
         'die Variable befüllen
         pAkD_ID = !akd_id

         ExportXML acExportTable, "qryAuftragskopfdaten", _
                   ExportPath & !akd_id & ".xml", _
                   AdditionalData:=objAdditionalData
         .MoveNext
      Loop
      .Close
   End With
End Sub

Titel: Re: XML Export von Tabellen via VBA
Beitrag von: Beaker s.a. am November 05, 2018, 14:14:03
@sellrich
Zitat
Public pAkdId eigentlich pAkD_ID sein soll?
Ja, das stimmt; - nur ein Tippfehler.

Zur Fehlermeldung:
Du musst der Methode natürlich das Objekt übergeben nicht den Namen
des Parameters
                   AdditionalData:=ad
gruss ekkehard
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: Lachtaube am November 05, 2018, 14:34:25
Da habe ich heute Morgen etwas geschludert - aber Ekkehard hat die Sache ja ins rechte Licht gerückt.
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: sellrich am November 05, 2018, 14:55:40
@beaker s.a. vielen Dank.

Du meinst sicherlich diesen Teil
         ExportXML acExportTable, "qryAuftragskopfdaten", _
                   ExportPath & !akd_id & ".xml", _
                   AdditionalData:=ad

Habe ich geändert zu "ad" allerdings ohne Erfolg.
Fehlermeldung bleibt die gleiche.
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: Lachtaube am November 05, 2018, 14:59:11
Hier habe ich auch noch einen Punkt unterschlagen. >:(
Do Until .EOF
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: sellrich am November 05, 2018, 15:07:28
Leute vielen lieben Dank für die Hilfe!

Zitat
Hier habe ich auch noch einen Punkt unterschlagen. >:(
Do Until .EOF

Danke dir! Wäre ich nicht so ein Anfänger, hätte ich selber erkennen müssen, dass da ein Punkt fehlt.


         ExportXML acExportQuery, "qryAuftragskopfdaten", _
                   ExportPath & !akd_id & ".xml", _
                   AdditionalData:=ad

Was ich aber herausgefunden habe ist, dass das acExportQuery stehen muss, statt Table. Da ich ja die Abfrage ausgeben möchte. Richtig?
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: Lachtaube am November 05, 2018, 15:38:33
Da wirst Du Recht haben. :)
Titel: Re: XML Export von Tabellen via VBA
Beitrag von: sellrich am November 06, 2018, 08:44:45
Guten Morgen liebe Helfer,

ich weiß, dass gehört vermutlich nicht in ein Access Forum. Aber ihr seid alle so Fit und antwortet so zügig, ich dachte ich versuch mal mein Glück.

Die oben exportierten XML-Files müssten alle um jeweils eine oberste und eine unterste Zeile erweitert werden. Automatisiert.
<order>
"Inhalt"
</order>
Kann man das beim erstellen/exportieren des XML-Files irgendwie verwirklichen? 
Ich bin was XML´s angeht noch weniger im Bilde als VBA.  :-X