Discussion:
Zeilenweise Export in textdatei
(zu alt für eine Antwort)
r***@googlemail.com
2007-01-15 08:40:11 UTC
Permalink
Hallo,

ich habe eine access datei mit 4 spalten -> auf buttonclick -->export
der DS in eine Textdatei (zeilenweise).
die datei ist schon da und müsste beim öffnen geleert werden und
anschließend an dem selben platz gespeichert werden.
Schön wäre noch wenn man in einer anderen tabelle die Pfade der datei
und den speicherort angeben könnte und dieser gleich in den code für
den export übertragen wird...

Leider bin ich nicht so fit in vba und komme nicht so recht weiter...

Ich danke euch allen und hoffe auf rege antworten

rejael
Stefan Dase
2007-01-15 08:59:38 UTC
Permalink
Hallo Rene,
Post by r***@googlemail.com
ich habe eine access datei mit 4 spalten -> auf buttonclick -->export
der DS in eine Textdatei (zeilenweise).
Du kannst eine Abfrage oder Tabelle mittels DoCmd.TransferText mit allen
Datensätzen in einem Schritt exportieren. Ein Beispiel:

DoCmd.TransferText acExportDelim, "Export-Spezifikation", _
"Tabellenname", "Dateiname"

Die Exportspezifikation musst du händisch anlegen, indem du eine Tabelle
manuell exportierst und dann die Einstellungen über "Weitere..." speicherst.

Wenn du mehr Zugriffs- und Formatierungsmöglichkeiten benötigst, kannst
du auch jede Zeile einzeln in eine Textdatei schreiben. Generelles
Vorgehen dabei: Textdatei zum Schreiben öffnen, Zeilen ermitteln, jede
Zeile einzeln schreiben, Textdatei schließen. Da dieser Ansatz etwas
komplexer ist, gebe ich dir ein paar Stichworte, mittels denen du dich
in der Online-Hilfe einlesen kannst: FreeFile, Open ... For Output
As..., Print #... / Write #..., Close #...
Post by r***@googlemail.com
die datei ist schon da und müsste beim öffnen geleert werden und
anschließend an dem selben platz gespeichert werden.
Wenn du den zweiten Ansatz mit "For Output" verwendest, kümmert sich VBA
um das Löschen der alten Werte und das Erstellen der Datei. Ansonsten
kann eine Datei mit entsprechenden Zugriffsrechten über Kill "Dateiname"
gelöscht werden. Neuerstellung dann mit beiden beschriebenen Methoden.
Post by r***@googlemail.com
Schön wäre noch wenn man in einer anderen tabelle die Pfade der datei
und den speicherort angeben könnte und dieser gleich in den code für
den export übertragen wird...
Einfache Möglichkeit ist, den Dateinamen in einer Tabelle abzuspeichern
und dann mittels DLookUp auszulesen. Ein Beispiel:

DLookUp("FileName", "tabEinstellungen")

HTH,
Stefan
r***@googlemail.com
2007-01-15 09:25:31 UTC
Permalink
He danke für die schnelle Antwort,

ich wollte es so machen, aber bleibt beim Movefirst stehen:

Private Sub Befehl10_Click()
Open "d:\test.txt" For Output As #1 'oder mit Freefile ermittelte
Nummer verwenden
ab.MoveFirst
Do While Not ab.EOF
Print #1, ab![Vorname]
Print #1, ab![Nachname]
Print #1, ab![EhepartnerName]
ab.MoveNext
Loop
Close #1

End Sub

ist das ein ansatz??
Post by Stefan Dase
Hallo Rene,
Post by r***@googlemail.com
ich habe eine access datei mit 4 spalten -> auf buttonclick -->export
der DS in eine Textdatei (zeilenweise).
Du kannst eine Abfrage oder Tabelle mittels DoCmd.TransferText mit allen
DoCmd.TransferText acExportDelim, "Export-Spezifikation", _
"Tabellenname", "Dateiname"
Die Exportspezifikation musst du händisch anlegen, indem du eine Tabelle
manuell exportierst und dann die Einstellungen über "Weitere..." speicherst.
Wenn du mehr Zugriffs- und Formatierungsmöglichkeiten benötigst, kannst
du auch jede Zeile einzeln in eine Textdatei schreiben. Generelles
Vorgehen dabei: Textdatei zum Schreiben öffnen, Zeilen ermitteln, jede
Zeile einzeln schreiben, Textdatei schließen. Da dieser Ansatz etwas
komplexer ist, gebe ich dir ein paar Stichworte, mittels denen du dich
in der Online-Hilfe einlesen kannst: FreeFile, Open ... For Output
As..., Print #... / Write #..., Close #...
Post by r***@googlemail.com
die datei ist schon da und müsste beim öffnen geleert werden und
anschließend an dem selben platz gespeichert werden.
Wenn du den zweiten Ansatz mit "For Output" verwendest, kümmert sich VBA
um das Löschen der alten Werte und das Erstellen der Datei. Ansonsten
kann eine Datei mit entsprechenden Zugriffsrechten über Kill "Dateiname"
gelöscht werden. Neuerstellung dann mit beiden beschriebenen Methoden.
Post by r***@googlemail.com
Schön wäre noch wenn man in einer anderen tabelle die Pfade der datei
und den speicherort angeben könnte und dieser gleich in den code für
den export übertragen wird...
Einfache Möglichkeit ist, den Dateinamen in einer Tabelle abzuspeichern
DLookUp("FileName", "tabEinstellungen")
HTH,
Stefan
Stefan Dase
2007-01-15 09:41:55 UTC
Permalink
Hallo Rene,
Post by r***@googlemail.com
Private Sub Befehl10_Click()
Open "d:\test.txt" For Output As #1 'oder mit Freefile ermittelte
Nummer verwenden
ab.MoveFirst
Do While Not ab.EOF
Print #1, ab![Vorname]
Print #1, ab![Nachname]
Print #1, ab![EhepartnerName]
ab.MoveNext
Loop
Close #1
End Sub
Wie ist ab definiert? Es müsste ein Recordset definiert werden, was
nicht im geposteten Teil enthalten ist. Ansonsten sieht es für mich
richtig aus.

Viele Grüße aus Bremen,
Stefan
r***@googlemail.com
2007-01-15 10:05:54 UTC
Permalink
ab ist eine normale abfrage, aber sicherlich kein richtiges recordset,
oder?
wie müsste ich denn das recordset erstellen?
danke für deine schnelle hilfe, ich hoffe ich nerve nicht zu sehr
Post by Stefan Dase
Hallo Rene,
Post by r***@googlemail.com
Private Sub Befehl10_Click()
Open "d:\test.txt" For Output As #1 'oder mit Freefile ermittelte
Nummer verwenden
ab.MoveFirst
Do While Not ab.EOF
Print #1, ab![Vorname]
Print #1, ab![Nachname]
Print #1, ab![EhepartnerName]
ab.MoveNext
Loop
Close #1
End Sub
Wie ist ab definiert? Es müsste ein Recordset definiert werden, was
nicht im geposteten Teil enthalten ist. Ansonsten sieht es für mich
richtig aus.
Viele Grüße aus Bremen,
Stefan
Thomas Möller
2007-01-15 10:18:58 UTC
Permalink
Hallo Rene,
Post by r***@googlemail.com
ab ist eine normale abfrage, aber sicherlich kein richtiges recordset,
oder?
wie müsste ich denn das recordset erstellen?
Dim db As DAO.Database
Dim rst As DAO.Recordset

Set db = CurrentDb()
Set rst = db.OpenRecordset("NameDeinerAbfrage", dbOpenSnapshot)


und am Ende Deines Codes dann:

rst.Close
Set rst = Nothing
Set db = Nothing


HTH
--
Thomas

Homepage: www.Team-Moeller.de
r***@googlemail.com
2007-01-15 10:36:19 UTC
Permalink
ab.MoveFirst -->hier hält er an und sagt odjekt erforderlich?????

Private Sub Befehl10_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("ab", dbOpenSnapshot)

Open "d:\test.txt" For Output As #1 'oder mit Freefile ermittelte
Nummer verwenden
ab.MoveFirst
Do While Not ab.EOF
Print #1, ab![Vorname]
Print #1, ab![Nachname]
Print #1, ab![EhepartnerName]
ab.MoveNext
Loop
Close #1
rst.Close

Set rst = Nothing
Set db = Nothing

End Sub
Post by Stefan Dase
Hallo Rene,
Post by r***@googlemail.com
ab ist eine normale abfrage, aber sicherlich kein richtiges recordset,
oder?
wie müsste ich denn das recordset erstellen?
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("NameDeinerAbfrage", dbOpenSnapshot)
rst.Close
Set rst = Nothing
Set db = Nothing
HTH
--
Thomas
Homepage: www.Team-Moeller.de
Joerg Ackermann
2007-01-15 10:47:08 UTC
Permalink
Hallo,


ab.MoveFirst -->hier hält er an und sagt odjekt erforderlich?????

...
rst.MoveFirst
Do While Not rst.EOF
Print #1, rst![Vorname]
Print #1, rst![Nachname]
Print #1, rst![EhepartnerName]
rst.MoveNext
...

Gruß
Thomas Möller
2007-01-15 10:47:49 UTC
Permalink
Hallo Rene,
Post by r***@googlemail.com
ab.MoveFirst -->hier hält er an und sagt odjekt erforderlich?????
Private Sub Befehl10_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("ab", dbOpenSnapshot)
Open "d:\test.txt" For Output As #1 'oder mit Freefile ermittelte
Nummer verwenden
ab.MoveFirst
Do While Not ab.EOF
Print #1, ab![Vorname]
Print #1, ab![Nachname]
Print #1, ab![EhepartnerName]
ab.MoveNext
Loop
Close #1
rst.Close
Set rst = Nothing
Set db = Nothing
End Sub
sorry, ich hatte es versäumt, mein Beispiel an Deine konkrete
Namensgebung anzupassen.

Wenn Du ab der reklamierten Zeile "ab" durch "rst" ersetzt, sollte es
funktionieren.

HTH
--
Thomas

Homepage: www.Team-Moeller.de
r***@googlemail.com
2007-01-15 10:59:19 UTC
Permalink
He super hat geklappt!!!!!!!!!! Danke
Kann ich in einer anderen Tabelle den Dateinamen und Ort (Open
"d:\test.txt" ) verändern, damit wenn sich der Pfad mal ändern
sollte, nicht in den quellcode geschrieben werden muss?
Ist auch nicht so wichtig --> Vielen dank!!!

Gruß René
Post by Stefan Dase
Hallo Rene,
Post by r***@googlemail.com
ab.MoveFirst -->hier hält er an und sagt odjekt erforderlich?????
Private Sub Befehl10_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("ab", dbOpenSnapshot)
Open "d:\test.txt" For Output As #1 'oder mit Freefile ermittelte
Nummer verwenden
ab.MoveFirst
Do While Not ab.EOF
Print #1, ab![Vorname]
Print #1, ab![Nachname]
Print #1, ab![EhepartnerName]
ab.MoveNext
Loop
Close #1
rst.Close
Set rst = Nothing
Set db = Nothing
End Sub
sorry, ich hatte es versäumt, mein Beispiel an Deine konkrete
Namensgebung anzupassen.
Wenn Du ab der reklamierten Zeile "ab" durch "rst" ersetzt, sollte es
funktionieren.
HTH
--
Thomas
Homepage: www.Team-Moeller.de
Thomas Möller
2007-01-15 11:12:34 UTC
Permalink
Hallo Rene,
Post by r***@googlemail.com
He super hat geklappt!!!!!!!!!! Danke
Schön, dass Dein Problem gelöst ist. ;-)
Post by r***@googlemail.com
Post by r***@googlemail.com
Open "d:\test.txt" For Output As #1 'oder mit Freefile ermittelte
Kann ich in einer anderen Tabelle den Dateinamen und Ort (Open
"d:\test.txt" ) verändern, damit wenn sich der Pfad mal ändern
sollte, nicht in den quellcode geschrieben werden muss?
anstatt den Pfad und den Dateinamen fest im Code zu verdrahten kannst Du
diese Daten z.B. auch in einem Textfeld auf Deinem Formular eingeben
lassen. Der Code ändert sich dann wie folgt:

Dim strPfad As String

strPfad = Me!txtDeinTextfeldMitDemDateinamen

Open strPfad For Output As #1


Wenn Du es ganz komfortabel haben willst, dann kannst Du noch einen
Dateiauswahldialog auf Deinem Formular plazieren. Infos findest Du hier:
www.donkarl.com?FAQ8.1

HTH
--
Thomas

Homepage: www.Team-Moeller.de
Loading...