Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[Access] Query export naar CSV lukt niet

Pagina: 1
Acties:

Vraag


  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
Ik ben bezig om via een Access frontend diverse informatie van een MySQL database te halen. Dit gaat allemaal prima echter nu wil ik graag een query maken die mij per leverancier een export csv file maakt genaamd "leverancier - datumtijd - export.csv"

In de tabel zelf staan een 5 tal velden (id, sku, qty, supplier, cost). Hiervan heb ik alleen sku,qty en cost nodig per leverancier.

Ik dacht dat het makkelijkste zou zijn om een formulier te maken met een knop waarmee ik een vba script oproep en dat dan automatisch de files gemaakt worden op een plek ergens. Daarna mag die betreffende database leeg gemaakt worden.

Ik heb onderstaande VBA met wat knip en plak werk gemaakt echter doet hij alleen de volledige database opslaan als ik daarheen verwijs. In die database staan echter nog meer velden welke ik niet wil hebben in de query.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Private Sub Exports_Click()
    Dim strSQL As String
    Dim testSQL As String
    Dim rs As DAO.Recordset
    Dim ranSupplier As String
    Dim LDate As String
    Dim qd As DAO.QueryDef
    Dim iQdef As Variant
    Dim db As DAO.Database
    Dim opslag As String
    
    Set db = CurrentDb
    
    For Each iQdef In db.QueryDefs
       If iQdef.Name = "tmpExport" Then
          db.QueryDefs.Delete ("tmpExport")
       End If
    Next iQdef

    LDate = Date
        
    strSQL = "SELECT DISTINCT inkoop_orders.supplier FROM inkoop_orders"   'define the SQL result that you want to loop
    Set rs = CurrentDb.OpenRecordset(strSQL)
         
    If Not rs.BOF And Not rs.EOF Then
        rs.MoveFirst
        While (Not rs.EOF)
            ranSupplier = rs.Fields("supplier")
            testSQL = "SELECT inkoop_orders.sku, inkoop_orders.qty, inkoop_orders.cost FROM inkoop_orders WHERE supplier like '*" & ranSupplier & "*'"
            MsgBox testSQL
            
            Set qd = db.CreateQueryDef("tmpExport", testSQL)
                        
            opslag = "d:\export.csv"
                        
            DoCmd.TransferText acExportDelim, "inkoop_orders", "tmpExport", "opslag", True
            
            MsgBox (rs.Fields("supplier")) 'define the field you want to return data
            
            db.QueryDefs.Delete "tmpExport"
            
            rs.MoveNext
        Wend
    End If
    rs.Close
    Set rs = Nothing
    db.QueryDefs.Delete "tmpExport"
    db.Close
    Set db = Nothing
    Set qd = Nothing

End Sub


Ik heb hier de hele middag diverse dingen zitten te proberen echter kom ik er niet wijs uit. Steeds weer als ik iets aanpas krijg ik weer andere foutmeldingen waardoor ik vast zit hiermee.

Wie kan mij vertellen wat ik fout doe of hoe ik dit het makkelijkste kan oplossen.

-Te huur

Beste antwoord (via Yagermeister op 16-01-2018 19:09)


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Yagermeister schreef op dinsdag 9 januari 2018 @ 21:34:
[...]


Ik denk niet dat ik 100% snap wat je bedoelt. Op dit moment doe ik namelijk een eerst distinct uitvoeren op de tabel om zo de unieke waardes (suppliers) te krijgen die ik daarna gebruik om per leverancier een export te kunnen krijgen.

Dit alles doe ik echter in vba. Ik weet ook wel hoe ik de queries in mysql krijg alhoewel ik even moet zoeken hoe ik de distinct moet gebruiken in combo met de export zoals hierboven omschreven. Echter weet ik niet hoe ik dit dan weer vanuit access moet aanroepen.
Dat is dan toch
SQL:
1
SELECT DISTINCT ... INTO OUTFILE '/pad/naar/file';

Alle reacties


  • Herby
  • Registratie: Januari 2004
  • Laatst online: 17-01-2022

Herby

Stalknecht

Het zou helpen als je de foutmelding erbij vermeld.

Compromis? Hoezo heb ik het mis dan?! | Geluk = gelul met een K | з=(•̪●)=ε


  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
Sorry, dat was ik helemaal vergeten. Met bovenstaande code krijg ik error 3027 van access. 1 van de andere codes die ik gehad heb was een 3011 in ieder geval.

-Te huur


  • breew
  • Registratie: April 2014
  • Laatst online: 23:16
@Yagermeister ik heb weinign ervaring met acces, wel met vba.
DoCmd.TransferText acExportDelim, "inkoop_orders", "tmpExport", "opslag", True

Waarom staat "opslag" tussen quotes (""), het is toch de naam van een String-variabele? Nu geef je hem (lijkt het) op als string "opslag".

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
breew schreef op dinsdag 9 januari 2018 @ 20:09:
@Yagermeister ik heb weinign ervaring met acces, wel met vba.
DoCmd.TransferText acExportDelim, "inkoop_orders", "tmpExport", "opslag", True

Waarom staat "opslag" tussen quotes (""), het is toch de naam van een String-variabele? Nu geef je hem (lijkt het) op als string "opslag".
Zonder quotes krijg ik net error 3011. Daarom snap ik net niet wat ik nou fout heb hierin. Ik heb wel een export met mijn instellingen opgeslagen als inkoop_orders want zonder die krijg ik ook errors maar dat lijkt me nu los te staan van dit allemaal want het werkt wel als ik de gehele db laat exporteren.

-Te huur


  • breew
  • Registratie: April 2014
  • Laatst online: 23:16
Op welke regel slaat de code vast als je gaat debuggen?

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
breew schreef op dinsdag 9 januari 2018 @ 20:15:
Op welke regel slaat de code vast als je gaat debuggen?
DoCmd.TransferText acExportDelim, "inkoop_orders", "tmpExport", opslag, True

Die regel knalt die op vast.

-Te huur


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Is INTO OUTFILE wellicht een optie voor je, die moet dan wel in de query komen te staan. :)

[ Voor 43% gewijzigd door CH4OS op 09-01-2018 20:21 ]


  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
CH4OS schreef op dinsdag 9 januari 2018 @ 20:18:
Is INTO OUTFILE wellicht een optie voor je, die moet dan wel in de query komen te staan. :)
Ik ken deze manier niet maar ik zie wel dat dit vooral iets is voor MySQL en niet zo zeer voor access of zie ik dat verkeerd? Ik kan namelijk niet zo snel een daadwerkelijke query vinden waar dit gebruikt wordt.

Als dit het probleem zou oplossen is het ook goed. Ik ben niet gebonden aan wat ik gebruik als ik het resultaat maar heb.

[ Voor 11% gewijzigd door Yagermeister op 09-01-2018 20:24 ]

-Te huur


  • breew
  • Registratie: April 2014
  • Laatst online: 23:16
Stomme vragen wellicht, maar:
- Is d:\ een vaste HDD, of een netwerkschijf? Heb je schrijfrechten daar?
- Lukt het wellicht wel naar C:\ ?
- En wat als je een bestandsnaam rechtstreeks ingeeft, in plaats van naar een variabele?
[pre]DoCmd.TransferText acExportDelim, "inkoop_orders", "tmpExport", "C:\test.csv", True

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
breew schreef op dinsdag 9 januari 2018 @ 20:24:
Stomme vragen wellicht, maar:
- Is d:\ een vaste HDD, of een netwerkschijf? Heb je schrijfrechten daar?
- Lukt het wellicht wel naar C:\ ?
- En wat als je een bestandsnaam rechtstreeks ingeeft, in plaats van naar een variabele?
[pre]DoCmd.TransferText acExportDelim, "inkoop_orders", "tmpExport", "C:\test.csv", True
- D is een vaste schijf. Het zou wel eigenlijk naar een netwerkschijf moeten gaan maar dat is geen vereiste.
- Het lukt naar geen schijf.
- De fouten zijn hetzelfde of ik een variable gebruik of niet.

-Te huur


  • breew
  • Registratie: April 2014
  • Laatst online: 23:16
heb jij "schema.ini" ergens staan?
Turns out that there is a leftover file called "schema.ini" that describes the export output fields, if I delete it then everything is fine. Looks like it was generated when I used the export wizard at some stage, and now it's screwing up all my VBA and macro exports.

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
breew schreef op dinsdag 9 januari 2018 @ 20:27:
heb jij "schema.ini" ergens staan?


[...]
Dat had ik ook gevonden maar ik kan die file nergens vinden in ieder geval.

-Te huur


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Yagermeister schreef op dinsdag 9 januari 2018 @ 20:24:
[...]


Ik ken deze manier niet maar ik zie wel dat dit vooral iets is voor MySQL en niet zo zeer voor access of zie ik dat verkeerd? Ik kan namelijk niet zo snel een daadwerkelijke query vinden waar dit gebruikt wordt.

Als dit het probleem zou oplossen is het ook goed. Ik ben niet gebonden aan wat ik gebruik als ik het resultaat maar heb.
Ja, dat zet je in je query naar MySQL toe. Vervolgens kun je dan toch vanuit Access met een VBA de file oproepen zodat 'ie geopend wordt?

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
CH4OS schreef op dinsdag 9 januari 2018 @ 21:08:
[...]

Ja, dat zet je in je query naar MySQL toe. Vervolgens kun je dan toch vanuit Access met een VBA de file oproepen zodat 'ie geopend wordt?
Ik denk niet dat ik 100% snap wat je bedoelt. Op dit moment doe ik namelijk een eerst distinct uitvoeren op de tabel om zo de unieke waardes (suppliers) te krijgen die ik daarna gebruik om per leverancier een export te kunnen krijgen.

Dit alles doe ik echter in vba. Ik weet ook wel hoe ik de queries in mysql krijg alhoewel ik even moet zoeken hoe ik de distinct moet gebruiken in combo met de export zoals hierboven omschreven. Echter weet ik niet hoe ik dit dan weer vanuit access moet aanroepen.

-Te huur


Acties:
  • Beste antwoord

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Yagermeister schreef op dinsdag 9 januari 2018 @ 21:34:
[...]


Ik denk niet dat ik 100% snap wat je bedoelt. Op dit moment doe ik namelijk een eerst distinct uitvoeren op de tabel om zo de unieke waardes (suppliers) te krijgen die ik daarna gebruik om per leverancier een export te kunnen krijgen.

Dit alles doe ik echter in vba. Ik weet ook wel hoe ik de queries in mysql krijg alhoewel ik even moet zoeken hoe ik de distinct moet gebruiken in combo met de export zoals hierboven omschreven. Echter weet ik niet hoe ik dit dan weer vanuit access moet aanroepen.
Dat is dan toch
SQL:
1
SELECT DISTINCT ... INTO OUTFILE '/pad/naar/file';

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
CH4OS schreef op dinsdag 9 januari 2018 @ 22:56:
[...]

Dat is dan toch
SQL:
1
SELECT DISTINCT ... INTO OUTFILE '/pad/naar/file';
Maar het distinct gedeelte is het probleem niet. Dit gedeelte werkt prima aangezien ik in de msgbox ook te zien krijg welke leverancier hij zou moeten exporteren op dat moment.

Het probleem zit hem erin dat hij of niets exporteert of juist de hele tabel. Ik heb gisteren nog even gestoeid met INTO OUTFILE maar het lijkt erop dat access daar niet zoveel zin in heeft om daarmee te werken. Ik weet ook niet precies hoe ik die query zou moeten aanroepen vanuit access als ik die opsla in mysql. Daarbij moet hij natuurlijk wel kunnen filteren met de distinct data die ik aanlever.

-Te huur


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Yagermeister schreef op woensdag 10 januari 2018 @ 08:21:
Het probleem zit hem erin dat hij of niets exporteert of juist de hele tabel. Ik heb gisteren nog even gestoeid met INTO OUTFILE maar het lijkt erop dat access daar niet zoveel zin in heeft om daarmee te werken. Ik weet ook niet precies hoe ik die query zou moeten aanroepen vanuit access als ik die opsla in mysql. Daarbij moet hij natuurlijk wel kunnen filteren met de distinct data die ik aanlever.
Je gebruikt Access enkel als soort van frontend voor MySQL? Of gebruik je Access ook om queries op de database af te vuren? In het laatste geval zou je gewoon de query moeten kunnen doen zoals ik die in het topic eerder al gaf.

Anderzijds zul je denk ik zonder INTO OUTFILE moeten doen en kun je wellicht kijken naar opties zoals gegeven in https://stackoverflow.com...th-user-defined-file-path? Al is StackOverflow ook niet heilig natuurlijk in de antwoorden, maar helpt het wel op weg wellicht.

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
CH4OS schreef op woensdag 10 januari 2018 @ 12:31:
[...]
Je gebruikt Access enkel als soort van frontend voor MySQL? Of gebruik je Access ook om queries op de database af te vuren? In het laatste geval zou je gewoon de query moeten kunnen doen zoals ik die in het topic eerder al gaf.

Anderzijds zul je denk ik zonder INTO OUTFILE moeten doen en kun je wellicht kijken naar opties zoals gegeven in https://stackoverflow.com...th-user-defined-file-path? Al is StackOverflow ook niet heilig natuurlijk in de antwoorden, maar helpt het wel op weg wellicht.
Ik gebruik access voor alles behalve de tabellen zelf. Dus ook alle queries (zijn er maar een paar) staan in access en wat ik gevonden heb kan access helaas niet echt overweg met into outfile.

Die post waar je heen linkt had ik gisteren ook gevonden en daar heb ik ook de code op gebaseerd. Ik heb alleen een specificatie moeten aanmaken om het werkend te krijgen maar toen kreeg ik de bovengenoemde foutmeldingen.

Wel heb ik vanmorgen nog wat dingen gevonden om het eventueel via een macro te kunnen exporteren en niet via vba. Dit moet ik echter wel nog testen en hopen dat dit het misschien oplost.

Als iemand anders een idee heeft dan hoor ik het graag.

-Te huur


  • breew
  • Registratie: April 2014
  • Laatst online: 23:16
zijn de kolomnamen in je specificatie wel exact!! gelijk aan die van je export?

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Yagermeister schreef op woensdag 10 januari 2018 @ 14:42:
Wel heb ik vanmorgen nog wat dingen gevonden om het eventueel via een macro te kunnen exporteren en niet via vba. Dit moet ik echter wel nog testen en hopen dat dit het misschien oplost.
Ik dacht dat macro's altijd in VBA geschreven waren? Zal wel oude info zijn dan, mijn kennis van Access is vrij beperkt, toen ik met een oude versie van Access werkte. :)

  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
breew schreef op woensdag 10 januari 2018 @ 14:44:
zijn de kolomnamen in je specificatie wel exact!! gelijk aan die van je export?
Ja, ik heb express een volledige export gemaakt en daar dan ook de specificatie van gemaakt (is alleen ; gebruikt en geen "" om de teksten).
CH4OS schreef op woensdag 10 januari 2018 @ 14:47:
[...]
Ik dacht dat macro's altijd in VBA geschreven waren? Zal wel oude info zijn dan, mijn kennis van Access is vrij beperkt, toen ik met een oude versie van Access werkte. :)
Het zal ongetwijfeld ook wel gedeeltelijk vba zijn. Het voordeel van de macro's is dat het met wat klikwerk ook zou moeten lukken. Zo heb ik ooit daarmee een pdf export kunnen maken dus misschien kan ik die code hergebruiken daarvoor.

-Te huur


  • Yagermeister
  • Registratie: December 2001
  • Laatst online: 17-11 08:38

Yagermeister

Bedrijfsprutser on call

Topicstarter
Om dan maar even een update te geven zodat deze post als opgelost kan worden gezien.

Ik heb gisteren nog wat liggen te klooien met vba echter lukte het van geen kant. Nu kwam ik wel een post ergens tegen die melde dat je de inhoud van de query door een eval moest halen om geen error 3011 te krijgen. Aangezien ik daar eigenlijk al mee klaar was heb ik daar verder niet echt meer iets mee gedaan. Als iemand deze link alsnog wilt hebben laat het even weten.

In ieder geval ben ik wat verder gaan denken en heb ik met VBA een extern PHP script wat ik aanroep. Bij het aanroepen doe ik de leverancier wat ik een paar regels eerder heb gevonden meesturen. Dit script roept de database query op en doet deze dan downloaden in het correcte format met als naam de leverancier en tijd. Deze code zal ik ook even toevoegen indien gewenst.

-Te huur

Pagina: 1