Avatar billede djblues Nybegynder
26. november 2007 - 14:50 Der er 26 kommentarer og
1 løsning

Database export til Txt fil (SILENT)

Hej

Jeg har en Access database, som bliver opdateret fra et andet program kontinueligt.
Jeg vil gerne have lavet et lille stykke vb-kod som åbner databasen, eksporterer data til en txt-fil og markerer de data der er eksporteret med et ja. ( data skal kun kunne eksporteres en gang, derfor skal eksporten tage højde for om "eksporteret" er sat til Ja eller Nej.. )
Avatar billede mugs Novice
26. november 2007 - 18:21 #1
"som åbner databasen"

Hvis db ikke er åben, kan du kun lave det i opgavestyring.
Avatar billede djblues Nybegynder
26. november 2007 - 18:34 #2
Jeg vil have en form for service eller bare en applikation der åbner Acces i silent mode, og eksporterer, markerer og lukker igen. Sådan hvert 10. minut eller lignende. og ja jeg kan bare bruge opgavestyringen til det. men man kunne jo evt også have applikationen til at køre hele tiden. det vigtigste er eksporten og markeringen...
Avatar billede mugs Novice
26. november 2007 - 19:11 #3
Jeg har ikke Access installeret i øjeblikket, men prøv at se i hjælpenm under Transfer Text.
Du kan også søge i eksperten's vidensbase, hvor der er flere eksempler.
Avatar billede fdata Forsker
26. november 2007 - 19:45 #4
Hvis du lader opgavestyringen starte basen, kan du oprette en makro ved navn AutoExec, som bare indeholder et kald til en opdateringsfunktion.

Makroen skal altå kun indeholde en linie med handlingen AfspilKode. I feltet funktionsnavn skriver du f.eks. Go().

Funktionen opretter du i et modul. Den vil kunne se ud i stil med:

Function Go()
  Dim strSQL As String
 
  DoCmd.SetWarnings False

  ' Sæt mærke
  DoCmd.RunSQL "UPDATE DinTabel SET Medtag=True WHERE EtEllerAndet=EtEllerAndet AND Eksporteret=False"
  ' Eksporter
  strSQL = "SELECT DinTabel.* FROM DinTabel WHERE Medtag=True"
  DoCmd.TransferText acExportDelim, , strSQL, "Filnavn.Txt", True
  ' Marker eksporterede poster
  DoCmd.RunSQL "UPDATE DinTabel SET Eksporteret=True WHERE Medtag=True"
  ' Slet mærke igen (måske lidt overfødigt)
  DoCmd.RunSQL "UPDATE DinTabel SET Medtag=False WHERE Medtag=True"

  DoCmd.SetWarnings True

  Application.Quit
End Function
Avatar billede fdata Forsker
26. november 2007 - 19:48 #5
... årsagen til at jeg anbefaler "Medtag" feltet er at du får et øjebliksbillede af tabellen. Det forhinderer, at en nyoprettet post smutter med ind i logikken. Teoretisk kunne en bruger jo oprette en ny post mens du afviklede koden.
Avatar billede djblues Nybegynder
26. november 2007 - 20:11 #6
-> fdata
Jeg får en "Expected: to" når jeg kører koden :
Function Go()
  Dim strSQL As String
 
  DoCmd.SetWarnings False

  ' Sæt mærke
  DoCmd.RunSQL "UPDATE Tabel SET Medtag=True WHERE Eksporteret=False"
  ' DoCmd.RunSQL "UPDATE Tbl 1 SET Medtag=True WHERE EtEllerAndet=EtEllerAndet AND Eksporteret=False"
  ' Eksporter
  strSQL = "SELECT Tabel.* FROM Tabel WHERE Medtag=True"
  DoCmd.TransferText acExportDelim, , strSQL, "Filnavn.Txt", True
  ' Marker eksporterede poster
  DoCmd.RunSQL "UPDATE Tabel SET Eksporteret=True WHERE Medtag=True"
  ' Slet mærke igen (måske lidt overfødigt)
  DoCmd.RunSQL "UPDATE Tabel SET Medtag=False WHERE Medtag=True"

  DoCmd.SetWarnings True

  Application.Quit
End Function
Avatar billede fdata Forsker
26. november 2007 - 22:17 #7
Øhm. Du kører vel ikke koden som den ser ud!?!
Som jeg skrev: "Den vil kunne se ud i stil med". Du skal jo lige rette den til.
F.eks. skal "WHERE EtEllerAndet=EtEllerAndet" jo erstattes med dine aktuelle parametre.
Prøv lige at sende koden, som den ser ud, når den er tilrettet din aktuelle base.
... og sæt så lige en pling foran "DoCmd.SetWarnings False", så du kan se, hvor fejlen opstår  ;o)
Avatar billede djblues Nybegynder
26. november 2007 - 22:23 #8
Jeg er nok ikke helt med.
Jeg har oprettet Functionen GO() i et Modul (Module2). Hvor er det lige jeg skal indsætte kaldet. Jeg har en Access 2007 ??
Avatar billede fdata Forsker
26. november 2007 - 22:27 #9
OK. Du har oprettet funktionen; men du skal jo rette tabelnavn, feltnavne og kriterier, så de passer med din base.
Kaldet skal du, som jeg skrev, lægge i en makro ved navn AutoExec. Den kører Access automatisk ved opstart.
Avatar billede djblues Nybegynder
26. november 2007 - 22:30 #10
Min tabel hedder "Tabel" Feltet Eksporteret hedder "Eksporteret" og linjen
--- DoCmd.RunSQL "UPDATE Tbl 1 SET Medtag=True WHERE EtEllerAndet=EtEllerAndet AND Eksporteret=False"
Her jeg rettet til
---DoCmd.RunSQL "UPDATE Tabel SET Medtag=True WHERE Eksporteret=False"
Avatar billede fdata Forsker
26. november 2007 - 22:35 #11
OK. Nu forvirrer du lidt. Du siger, at din tabel hedder "Tabel"; men din SQL siger "UPDATE Tbl 1 ..."
Jeg går ud fra, at din tabel så hedder "Tbl 1". Ikke så smart et navn. Mellemrum er forbudt. Omdøb den til Tbl1 - eller ret SQL til "UPDATE [Tbl 1] ..."

Hvis du får fejl igen, hvor optræder den så nu?
Avatar billede fdata Forsker
26. november 2007 - 22:36 #12
... øh - tog lige mine læsebriller på. Sorry. Du har jo rettet det.

Hvor opstår fejlen?
Avatar billede djblues Nybegynder
26. november 2007 - 22:39 #13
Den kommer med en "Compile Error Expected: TO"
med det samme jeg forsøger at køre koden
Avatar billede fdata Forsker
26. november 2007 - 22:41 #14
Yes yes - men hvor?
Avatar billede djblues Nybegynder
26. november 2007 - 22:43 #15
Jeg får aldrig at vide hvor....
Avatar billede fdata Forsker
26. november 2007 - 22:45 #16
Stå et sted i koden. Vælg menuen Debug/Compile. Nu burde den melde fejl. Hvilken linie står markøren så i?
Avatar billede djblues Nybegynder
26. november 2007 - 22:47 #17
Men hvor er det lige igen jeg skla lægge koden ??
I et Module
I en Class
???
Avatar billede fdata Forsker
26. november 2007 - 22:47 #18
I et modul. Du er på rette vej.
Kunne fejlen ligge i et andet modul? Har du en For-løkke uden den tilhørende To?
Avatar billede fdata Forsker
26. november 2007 - 22:49 #19
FYI: Vi nærmer os næste episode af "24". Logger af om 3 minutter ...
Avatar billede djblues Nybegynder
26. november 2007 - 22:49 #20
Module1 ==
Option Compare Database
Function Go()
  Dim strSQL As String
 
  'DoCmd.SetWarnings False

  ' Sæt mærke
  DoCmd.RunSQL "UPDATE Tabel SET Medtag=True WHERE Eksporteret=False"
  ' DoCmd.RunSQL "UPDATE Tbl 1 SET Medtag=True WHERE EtEllerAndet=EtEllerAndet AND Eksporteret=False"
  ' Eksporter
  strSQL = "SELECT Tabel.* FROM Tabel WHERE Medtag=True"
  DoCmd.TransferText acExportDelim, , strSQL, "Filnavn.Txt", True
  ' Marker eksporterede poster
  DoCmd.RunSQL "UPDATE Tabel SET Eksporteret=True WHERE Medtag=True"
  ' Slet mærke igen (måske lidt overfødigt)
  DoCmd.RunSQL "UPDATE Tabel SET Medtag=False WHERE Medtag=True"

  DoCmd.SetWarnings True

  Application.Quit
End Function
Avatar billede fdata Forsker
26. november 2007 - 22:50 #21
... men altså:
Stå et sted i koden. Vælg menuen Debug/Compile. Nu burde den melde fejl. Hvilken linie står markøren så i?
Avatar billede djblues Nybegynder
26. november 2007 - 22:52 #22
ja, men den melder ikke fejl ...
Hvorfra sagde du jeg skulle kalde "GO()" fra..
Avatar billede fdata Forsker
26. november 2007 - 22:54 #23
Fra en makro. Læs mit allerførste svar. Der står det hele.

Sorry. Er nødt til at hoppe fra nu. 24 kalder.

Er på igen i morgen tidlig. Håber, du er kommet videre inden da.
Avatar billede djblues Nybegynder
26. november 2007 - 22:58 #24
Takker, jeg har lige hentet et lille stykke kode fra Acces hjælpen lignende din, og den virker fint, så jeg skal nok finde fejlen ... jeg skriver nærmere ..
Avatar billede djblues Nybegynder
27. november 2007 - 00:04 #25
Godmorgen - Nu får jeg fejlen Error 3011 på linjerne :
  strSQL = "SELECT KJ.* FROM KJ WHERE Medtag=True"
  DoCmd.TransferText acExportDelim, , strSQL, "Filnavn.Txt", True
Noget med at access ikke kunne finde objektet ..?
any idea
Avatar billede djblues Nybegynder
28. november 2007 - 12:30 #26
Jeg har forsøft mig lidt frem og tilbage, og har fået det til at fungere,, eller ikke ! Jeg fandt nemlig ud af at det ikke duer at lave det som en makro i Access.
Jeg bliver nødt til at have det som et vb-program der laver arbejdet, uden at der skal programmeres noget ind i databasen.
Du får point, og jeg stiller lige spørgsmålet i VB sektionen.. TAK
Avatar billede fdata Forsker
28. november 2007 - 23:38 #27
Velbekomme - og takkker for point. God fornøjelse med projektet  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester