26. november 2007 - 14:50Der 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.. )
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...
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.
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"
... å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.
-> 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"
Ø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)
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.
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"
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] ..."
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"
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 ..
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
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
Velbekomme - og takkker for point. God fornøjelse med projektet ;o)
Synes godt om
Ny brugerNybegynder
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.