XML bestand aanmaken

Status
Niet open voor verdere reacties.

tigo01

Gebruiker
Lid geworden
11 dec 2011
Berichten
47
Hi, ik werk met access en VBA. In VBA vul ik een tijdelijke tabel met XML commando's. Gaat allemaal prima. Maar nu wil ik deze tabel exporteren naar een XML bestand. ik gebruik herivoor het volgende commando:

Application.ExportXML ObjectType:=acExportTable, DataSource:="Incassobestand", DataTarget:="M:\Temp\incasso.xml"


Nu wordt inderdaad de incasso.xml aangemaakt, maar met de volgende inhoud:

<Incassobestand><XMLregel><CstmrDrctDbtInitn></XMLregel></Incassobestand>
<Incassobestand><XMLregel><GrpHdr></XMLregel></Incassobestand>
enz.

Mijn tijdelijke tabel heet incasso, en de veldnaam in het record heet XMLregel. Je ziet het al, de bestands- en veldnaam wordt om de feitelijke xml regel (de inhoud van mijn records) gezet. Mijn vraag is hoe ik dus alleen de inhoud naar mijn XML bestand kan exporteren. Dus zo:

<CstmrDrctDbtInitn>
<GrpHdr>
enz.


Wellicht gebruik ik niet het juiste commando, maar met google kom ik er niet echt achter wat er nou mis is. Alvast bedankt voor de hulp.

Mvg. Tigo
 
Ik gebruik een andere techniek. Ik zal niet zeggen dat die beter, is, maar ik krijg er wel data in. En dat lijkt bij jouw wat lastiger :).
Code:
    Set rst = New ADODB.Recordset
    DoCmd.Echo False, "Bezig met openen van recordset."
    With rst
        .ActiveConnection = CurrentProject.Connection
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockReadOnly
        .Open strSQL
        strFileXML = CurrentProject.Path & "\Voorbeelduitlevering XML.xml"
        'strFileADTG = CurrentProject.Path & "\Wagenpark Positief.adtg" 'Standaard uitlevertype
        
        'Verwijder het oude bestand, omdat de procedure anders crasht.
        On Error Resume Next
            Kill strFileXML
        Err.Clear
        On Error GoTo 0
        
        DoCmd.Echo False, "Bezig met opslaan van: " & strFileXML
        'Nu slaan we de recordset op (in ADTG or XML Format)
        .Save strFileXML, adPersistXML
    End With
Wel de ADO bibliotheek aanzetten, anders werkt het niet.
 
Laatst bewerkt:
Hi Michel, wederom hartelijk dank voor je hulp. Ik twijfel er niet over dat jouw uitwerking beter is :D Dit gaat me net een stap te ver om zelf te verzinnen. Wat zeg ik, wel 3 stappen :confused:

Dus heb ik jouw code over genomen (Microsoft DAO 3.6 object library staat aangevinkt). Helaas krijg ik de volgende melding:

Fout 3001 De argumenten zijn van het verkeerde type, vallen buiten het toegestane bereik of zijn in conflict met elkaar. Dit gebeurt op het statement ".open strSQL"

ongetwijfeld had ik zelf eea op mijn situatie moeten aanpassen, maar ik ben het spoor effe bijster. Hopelijk kun je me nog verder in de goede richting helpen.

Overigens, ik kreeg er wel data in (in mijn XML file), alleen er kwam veel meer data bij waar ik niet op zat te wachten :rolleyes:

Gr. Tigo
 
Sorry :)

En vergeef me mijn onwetendheid, maarreh, welke ADO library? ik zie er een stuk of 12 genoemd worden.

Gr. Tigo
 
12 ADO bibliotheken? Dan gebruik je een hele nieuwe Access versie :). Ik heb er maar 7, en dan gebruik ik Access t/m 2013. En nog een paar extensions op de latere versies. Maar troost je: het maakt eigenlijk niet zoveel uit welke versie. Dat heeft hooguit invloed als je data deelt met oudere Access versies. Pak dus de meest recente versie, bij mij is dat 6.0. Maar 2.8 is ook prima. Veel lager zou ik niet gaan. Maar ADO is redelijk upward compatible, dus je zult niet snel in de problemen komen met een oudere versie.
 
Hi Michel, ach ja, ik overdrijf soms een beetje ;)

Ik heb nu "Microsoft ActiveX Data Objects Recordset 6.0 Library" toegevoegd. Hopelijk is dit degene die je bedoelt. Of eigenlijk hoop ik dat niet, want het effect is nml hetzelfde. Fout 3001 en in de xml deze inhoud:
<qry_x0020_incassobestand>
<XMLregel>
<GrpHdr>
</XMLregel>
</qry_x0020_incassobestand>
enz.

Ik hoop weer op een reactie van je, in ieder geval wederom bedankt voor alle hulp.

Mvg. Tigo
 
Wellicht wordt het tijd voor een bestandje :). Ik kan je fout namelijk niet reproduceren.
 
Thanks Michel. Maar hoe krijg ik het bestandje bij jou? Heb het zo klein mogelijk gemaakt en gezipt, maar het is ruim 300Mb, en de maximum grootte van een bijlage is 100MB :(

Gr. Tigo
 
Ik denk dat je de regels niet helemaal goed hebt gelezen, want de max voor een bestandje is geen 100 Mb, maar 100 Kb. En dat is nét even wat minder :). Maar je kunt (ik vermoed overigens een typefout) je bestand met WinRar opsplitsen in deelbestanden van 100kb (niet doen als het écht 300 Mb is; dan krijg je een paar duizend bestandjes!) en die dan posten. Of je gebruikt een fileshare als Wikisend.com.
 
Ik ga er vanuit dat ik voor filesharing jouw email nodig heb
Bij Filesharing zet je het bestand in de cloud, en daar wordt dan een link van gegenereerd. Die link kopieer je en plak je in je bericht. Je hebt dus geen email adres nodig verder. Ik zal vandaag wel even naar je bestand kijken :).
 
En dat heb ik bij deze gedaan: en dat roept 1 belangrijke vraag op: wat wil je hiermee? Je hebt een tabel [Incassobestand] met één veld. En als ik je tabel open, dan zie ik een compleet xml bestand staan. De complete tabel ís dus al een xml bestand, alleen zijn alle regels ingelezen in een tabel, i.p.v. dat de gegevens netjes zijn geïmporteerd. Dit kan je dan ook nooit exporteren als een nieuw xml bestand, want daar is het helemaal niet geschikt voor. Hooguit kun je de tabel exporteren als een tekst bestand, en dan hopen dat de indeling nog steeds geschikt is om als xml te behandelen. Als ik het exporteer lukt dat overigens niet; ik krijg de xml regels nog wel te zien met de juiste tags, maar ik krijg er ook allerlei garbage bij. Je zult het bestand dus (vermoed ik) ook nog op moeten schonen. De output ziet er dan ongeveer zo uit:
Code:
-----------------------------------------------------------------------------------
| </RmtInf>                                                                       |
-----------------------------------------------------------------------------------
| </DrctDbtTxInf>                                                                 |
-----------------------------------------------------------------------------------
| </PmtInf>                                                                       |
-----------------------------------------------------------------------------------
| </CstmrDrctDbtInitn>                                                            |
-----------------------------------------------------------------------------------
| </Document>                                                                     |
-----------------------------------------------------------------------------------

Kortom: het probleem begint al bij je starttabel, die nooit zo mag worden gemaakt!
 
Hoi Michel, de vraag is dan hoe ik een xml bestand maak in VBA/Access. Ik heb dus gegevens in tabellen staan die ik wil exporteren naar een xml bestand. Ik dacht dus alle gegevens die ik nodig heb uit de diverse tabellen te halen en deze als xml regels op te slaan in een tabel en deze te exporteren. Maar dat kan dus niet. Wat zou jou advies dan zijn als starttabel?

Overigens, die garbage die jij ook krijgt zijn de bestand- en veldnaam. Die kan ik dus niet verwijderen. Wederom alvast bedankt voor je hulp.

Mvg. Tigo
 
Gewoon de tabel exporteren met de code die ik hierboven al aangegeven heb. Werkt voor mij prima.
 
Sorry Michel, dat begrijp ik niet. ik heb jouw code toch erin zitten? Maar ik krijg op het commando ".open strSQL" dus een foutmelding. En als ik je laatste antwoord lees, kan ik dus wel de inhoud van een tabel als xml wegschrijven? Terwijl je ook zegt dat mijn starttabel niet goed is. I'm lost :confused:
 
Met garbage bedoel ik in dit geval de lijnen die je ziet. Die moeten er denk ik nog uit. Jouw aanpak is denk ik niet goed:
Ik dacht dus alle gegevens die ik nodig heb uit de diverse tabellen te halen en deze als xml regels op te slaan in een tabel en deze te exporteren.
Je exporteert een tabel of een query, en de output (.Save strFileXML, adPersistXML) bepaalt het outputformat. strFileXML moet dus gewoon verwijzen naar een query met gegevens, of een tabel.
 
Hoi Michel,

ik heb je code over genomen met wat aanpassingen die denk ik nodig zijn:
Set rst = New ADODB.Recordset
strSQL = "Select * from incassobestand"
DoCmd.Echo False, "Bezig met openen van recordset."
With rst
.ActiveConnection = CurrentProject.Connection
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Open strSQL
strFileXML = "M:\DGA\voorbeeld.xml"
'strFileADTG = CurrentProject.Path & "\Wagenpark Positief.adtg" 'Standaard uitlevertype

'Verwijder het oude bestand, omdat de procedure anders crasht.
On Error Resume Next
Kill strFileXML
Err.Clear
On Error GoTo 0

DoCmd.Echo False, "Bezig met opslaan van: " & strFileXML
'Nu slaan we de recordset op (in ADTG or XML Format)
.Save strFileXML, adPersistXML
End With

De set rst heb ik toegevoegd omdat ik anders de foutmelding op het ". Open strSQL" statement krijg. Ik krijg nu wel uitvoer, maar nog steeds niet datgene dat ik zoek. En tevens blijft mijn access hangen. Kan het alleen uitzetten door Ctrl/Alt/Delete. Zit dus nog steeds niet goed. Zou je me nog een keer willen helpen? Dat hoeft overigens niet voor niets. Wellicht iets voor buiten dit forum? Hoor graag van je.

Mvg. Tigo
 
Ik zie dat je de CODE knop nog steeds niet gevonden hebt :). Zoek 'm eens op in het venster <Ga geavanceerd], of typ de code tags ([ code ] (voor de code) en [ /code] (achter de code) (zonder spaties) er zelf bij.
Bij mij blijft Access er niet op hangen, dus dat is wel vreemd. Op welke regel gebeurt dat, als je met <F8> door de code loopt?
 
Het komische is dat Access gewoon dor loopt tot End Sub. Alleen daarna komt ie niet terug op het menuscherm. ik krijg geen foutmelding of wat dan ook, Access blijft compleet hangen. Ik werk overigens met de 2007 versie, mocht dat wat uitmaken.

Code:
    Set rst = New ADODB.Recordset
    strSQL = "Select * from incassobestand"
    DoCmd.Echo False, "Bezig met openen van recordset."
    With rst
        .ActiveConnection = CurrentProject.Connection
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockReadOnly
        .Open strSQL
        strFileXML = "M:\DGA\voorbeeld.xml"
        'strFileADTG = CurrentProject.Path & "\Wagenpark Positief.adtg" 'Standaard uitlevertype
        
        'Verwijder het oude bestand, omdat de procedure anders crasht.
        On Error Resume Next
            Kill strFileXML
        Err.Clear
        On Error GoTo 0
        
        DoCmd.Echo False, "Bezig met opslaan van: " & strFileXML
        'Nu slaan we de recordset op (in ADTG or XML Format)
        .Save strFileXML, adPersistXML
    End With
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan