Export to csv file

Status
Niet open voor verdere reacties.
Michel, dat van vorige versies meenemen in nieuwe versies klopt niet; die Microsoft programmeurs hebben er in de loop van de "updates" van alles uitgekieperd (of VBA verwijzingen aangepast) waardoor bepaalde oude DB's niet meer werken. Als deze dan nog API's aanriepen waren de problemen groter.
Mocht je 's tijd hebben om een werkende exportfunctie voor een tabel/query/recordset...... naar CSV (met ; als scheidingsteken) te kunnen presenteren "met-één-druk-op-de-knop" dan zullen er U velen dankbaar zijn. :)
 
@Johan: ik dacht ergens gelezen te hebben dat exportdefinities uit 2k3 versies nog in de db zitten in de 2007+ varianten. Het is dan dacht ik wel zo dat je de db zelf niet moet converteren, maar dus als mdb bestand moet blijven gebruiken. Maar het onderwerp interesseerde me te weinig om daar echt veel aandacht aan te besteden :).
Ik zal, na de vakantie, de ini routine die ik heb posten. Want hij is best handig in het gebruik.
 
Na lang zoeken, denk ik toch, de oplossing gevonden te hebben.

Rechterklik op de tabel of query die je wil exporteren.
Kies txt bestand.
Kies folder en naam van het bestand.
Klik op de knop Advanced
Hier kan je instellingen instellen.
Klik op de knop "opslaan als" (in mijn voorbeeld exportcsv) en kijk onder de knop "specificaties".
Onder deze knop moet uw 'config' file zichtbaar zijn.
Doorloop daarna de verdere stappen.
En als je daarna het commando : docmd.transfertext acExportdelim, "exportcsv", ......
En het werkt.

Hopelijk dat het ook werkt bij anderen met hetzelfde probleem.

Alvast bedankt.
 
Laatst bewerkt:
Zo rondbladerend op Google kwam ik inderdaad ook tegen dat 'ergens' wat was in te stellen bij/onder Advanced, maar kwam dat in geen enkele officiële instructie tegen. Zal wel aan de versie Access gelegen hebben, want een andere verklaring heb ik niet.

Wel nog even een vraag: Kun je nu wel de 2 vragen handhaven bij je query of moet je die (zoals OctaFish aangaf) toch op de een of andere manier 'hardcoden' (vb [Geef de dag] en [Geef company]).

Tijs.
 
Rechterklik op de tabel of query die je wil exporteren.
1. Kies txt bestand.
2. Kies folder en naam van het bestand.
3. Klik op de knop Advanced
Hier kan je instellingen instellen.
Kleine aanvulling: het is belangrijk dat je in stap 2 niet de optie <Gegevens exporteren met opmaak> aanvinkt; dat is namelijk de crux. Doe je dat wel, dan krijg je de standaard layout mee en kun je niks zelf instellen. Laat je de opties leeg, dan kun je dus in stap 3 op <Geavanceerd> klikken en een eigen exportdefinitie samenstellen. En die werkt dus (geldt ook voor Johan ;) ) op dezelfde wijze als in de vorige Access versies. Vandaar mijn voorzichtige stelling dat bestaande definities wel degelijk gebruikt konden worden in nieuwere versies, want dat had ik al eens gedaan (dacht ik).
 
Ivm de vraag of het exporteren naar txt ook werkt als er vragen wordt gesteld in de query ? ([Geef de dag] en [Geef company]).
Dat werkt helaas niet.

Als je een query hebt, in mijn geval, die twee vragen stelt en je kiest voor export, om exportcsv aan te maken, dan krijg je de melding :
Er zijn te weinig parameters. Het verwachte aantal is : 2.

Wat heb ik toen geprobeerd ?

De vragen efkes 'verwijdert'. En de export doorlopen.
Je kan een exportcsv aanmaken.
Een knop aangemaakt op het formulier dat de vba doorloopt.
Dan krijg je perfect een .csv bestand.
Daarna de vragen terug ingevoerd in de query. (met de hoop dat Access hier niets van zal merken :) )
Maar als je dan wilt exporteren, via de knop op het formulier, krijg je de melding :
De gegevens die u momenteel exporteert, komen niet overeen met de indeling die wordt beschreven in het bestand Schema.ini

Het zou leuk zijn als dit ook zou werken. Maar als ik lees op het forum is het niet mogelijk.
Er is wel een work-around maar was handiger als het wel zou werken.
Maar ben wel zeer blij met een juiste .csv bestand. :)

Nogmaals dank aan iedereen voor de hulp.
 
Probleem is dat we de gebruikers van de database steeds proberen weg te houden van de rechtstreekse toegang tot de tabellen en het navigatievenster. Het moet dus iets zijn dat we, zoals vroeger, eenvoudig achter een knop op een formulier kunnen nestelen (en dat éénmaal drukken genoeg moet zijn).
 
Hier ben ik alweer met een vraag omdat het exporteren toch nog niet lukt als je vanuit een query maar een subset van data wil.

Maw wanneer je de vragen stelt in de query ([Geef de dag] en [Geef company]) en dan kan je niet exporteren.
Ik dacht ik maak een formulier met twee velden [Geef de dag] en [Geef company] en verwijs in de query naar deze twee velden op het formulier "exportformulier".
Maw in de query forms!exportformulier!dag en forms!exportformulier!company

Dus ik dacht dat dit wel zou werken. Maar helaas.
Krijg ik de melding : De gegevens die u momenteel exporteert, komen niet overeen met de indeling die wordt beschreven in het bestand Schema.ini

En als ik een nieuw exportcsv wil aanmaken krijg je de melding van "..... te weinig paramaters : 2".

Dus nu zit ik nog met de vraag : op welke manier kan ik nu een export maken van een query waarin vragen worden gesteld ?
Wat kan een work-around zijn ?

Ik kan natuurlijk de query vervangen door een tabelmaakquery. Dwz eerste de vragen stellen en daarna een tabel maken. En deze tabel exporteren.
Heb het nog niet getest maar zal wel werken. Maar misschien is er een betere oplossing.

Alvast bedankt.
 
Laatst bewerkt:
Je moet éénmaal, als administrator, de exportstappen doorlopen en de 'config' file (in mijn geval exportcsv) wegschrijven. Deze file wordt in de db bijhouden / bewaard.
Achter een knop, zo heb ik het ook gedaan, kan je exporteren via het vba commando docmd.transferexport axExportdelim, "exportcsv", ..........

Het probleem dat ik nu nog heb, zie vorige post, is dat ik wil exporteren vanuit een query die twee vragen stelt.

Hiervoor zoek ik nog een oplossing.

Maar ik heb getest met query zonder vragen, waarden hardcoded ingevoerd in de query (vb 29/06/2017 en 2000), en dan werkt het perfect. Code achter een knop gestoken op het formulier.
 
En als ik een nieuw exportcsv wil aanmaken krijg je de melding van "..... te weinig paramaters : 2".
Ik heb het antwoord al eerder gegeven, dus wellicht is dit het moment om dat dan ook maar toe te passen :). Een export naar csv wil vaste gegevens hebben. Die lever je niet, je levert een query met parameters. Dat zijn alle criteria tussen []. Dan maakt het niet uit of dat een vraag is, zoals je eerst gebruikte, of vanaf een formulier. Het principe is hetzelfde: geen vast criterium.

Hoe doe je het dan wel? Je moet de query dus voorzien van vaste criteria. Dat doe je door vanuit de QueryDefs collectie de onder de query liggende SQL aan te passen. Dat kan prima met velden die je op een formulier laat invullen, zolang je dus daarna die ingevulde waarden vertaalt naar een vast criterium. Ik heb daar talloze voorbeelden al van gepost.
 
Hoi,

Ik ben maar een Access beginner. Dus QueryDefs collectie ?????
Maar heb wat liggen zoeken op internet.

Dim tmpSql As String
Dim qd As DAO.QueryDef
Dim tmpOutputFile As String

tmpSql = "SELECT * FROM q_lijst" (q_lijst is query met de 2 vragen)
tmpOutputFile = "c:\temp\export20170629.CSV"

Set qd = db.CreateQueryDef("tmpExport", tmpSql)

DoCmd.TransferText acExportDelim, "exportcsv", "tmpExport", tmpOutputFile
db.QueryDefs.Delete "tmpExport"

Maar bij klik op de knop krijg ik volgende foutmelding :
Dim qd As DAO.QueryDef : Compileerfout : Een door de gebruiker gedefinieerd gegevenstype is niet gedefinieerd.

Ik gebruik Access 2010

Wat gaat er fout ?

Alvast bedankt.
 
Laatst bewerkt:
Je bent nog steeds bezig met een query met parameters. De grap van een querydef is nu juist dat je een dynamische query opbouwt zónder die parameters. Met dus de criteria als vaste gegevens in de query. Wat je nog meer fout doet? Je code niet opmaken met de CODE knop :).
 
@OctaFish: Hoe makkelijk is het dan om vooraf de parameters op te vragen en door QueryDef te laten 'injecteren'? Want dat lijkt me momenteel het grootste struikelblok voor de vragensteller?

Tijs.
 
@Tijs (en TS uiteraard). In de query zitten blijkbaar 2 vragen.
Ivm de vraag of het exporteren naar txt ook werkt als er vragen wordt gesteld in de query ? ([Geef de dag] en [Geef company]).

De eerste vraagt vermoedelijk om een datum. Dat is een enigszins vervelende, omdat de datum doorgaans in het Nederlandse format wordt ingevoerd, maar door de VBA engine als Amerikaanse datum wordt uitgevoerd. Je kunt dus 7-9-2017 op twee manieren lezen: 7 september en 9 juli. De VBA code leest 'm als 9 juli. Maar daar is een oplossing voor, dus verder geen probleem. De tweede vraag zou al helemaal niet zo gesteld mogen worden, lijkt mij, omdat hij nogal foutgevoelig is. Bedrijfsnamen heb je vast in een tabel staan, en het is dus vele malen logischer om het gewenste bedrijf te kiezen vanuit een keuzelijst (met invoervak). Sneller en foutlozer. We hebben het dan al gelijk over een zoekformulier met dus twee tekstvakken: een datumveld, en een keuzelijst voor de bedrijfsnaam. Persoonlijk zou ik voor de datum trouwens ook een keuzelijst gebruiken, al was het maar om te voorkomen dat de gebruiker een niet-gebruikte datum invoert, en dus bot vangt omdat er niks te vinden is voor die dag. Beter nog: gebruik twee keuzelijsten, zodat je ook nog eens kunt kiezen voor een datumbereik.

Goed, je hebt dus een formulier met daarop een of twee keuzelijsten (of tekstvakken) voor de datums en een keuzelijst voor het bedrijf.
Dan krijg je, en ik gebruik in het voorbeeld maar één tekstvak, omdat TS dat ook doet, zoiets:
Code:
Dim qDef As QueryDef
Dim tmpSQL As String
Dim tmpOutputFile As String

    tmpSQL = "SELECT * FROM [Tabel] WHERE [Datum] = CDate(" & CDbl(Me.txtDatum) & ") AND [BedrijfsID] = " & Me.cboBedrijf
    Set qTmp = CurrentDb.QueryDefs("tmpExport")
    qTmp.SQL = tmpSQL
    tmpOutputFile = "c:\temp\export" & Format(Date, "yyyymmdd") & ".csv"
    DoCmd.TransferText acExportDelim, "exportcsv", "tmpExport", tmpOutputFile

Ik heb gelijk de output ook maar dynamisch gemaakt, want dat lijkt toch ook de bedoeling. En ik hergebruik dus een query; ik gooi eigenlijk nooit een tijdelijke query weg. Waarom zou je? Je kunt hem overal voor gebruiken namelijk.
 
@OctaFish: Dit verduidelijkt mij een hoop, dank daarvoor.

Tijs.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan