Zeilenumbruch in der Ausgabedatei
Hallo, hallo,
ich versuche hier mei Problem zu schildern
Ich habe in Access97 eine Tabelle, ca. 70 Spalten, welche danach in einer Texdatei ausgegeben werden soll (*.txt), wo die Felder mit Semikolon ";" getrennt sein sollen. Soweit ok, habe ich hinbekommen.
Das Problem ist, dass jede Zeile in drei geteilt werden soll und untereinander linksbündig angeordnet. Ich versuche mal hier ein Beispiel darzustellen:
Beispiel Access Tabelle, ohne Überschrift, nur der Inhalt:
A | 1 | 2 | 3 | 4 | B | 5 | 6 | 7 | 8 | C | 9 | 10 | 11 | 12
A | 1 | 2 | 3 | 4 | B | 5 | 6 | 7 | 8 | C | 9 | 10 | 11 | 12 usw
Die Zeilen sind natürlich nicht identisch.
Das Ergebnis soll so als Textdatei aussehen:
A;1;2;3;4
B;5;6;7;8
C;9;10:11;12
A;1;2;3;4
B;5;6;7;8
C;9;10:11;12 usw.
Also bei B und C ein Zeilenumbruch, dann wieder A usw.
Hoffe, dass ich deutlich genug war ;-)
Hat schon jemand von euch die Erfahrung gemacht und mir weiterhelfen kann?
Vielen Dank
Gruß Matty
Antwort schreiben
Antwort 1 von Teddy7 vom 17.08.2019, 14:21 Options
das ist m.E. nur mit VBA-Programmierung möglich.
Gruß
Teddy
Antwort 2 von Coolpix vom 17.08.2019, 15:12 Options
hallo Matty,
ich habe hier eine kleine Prozedur, welche die Datensätze einer Tabelle in ein Textfile im TEMP-Vezeichnis ausgibt...
ich hoffe das hilft dir weiter!
Sub TextAusgabe()
Dim Datei As String
Dim strSQL As String
Dim RS As DAO.Recordset
Dim DB As DAO.Database
Dim Part As Variant
Dim Parts As Variant
Dim strDS As String
Dim strAusgabe As String
Dim i As Integer
Dim Schalter As Boolean
'Pfad der Ausgabedatei
Datei = VBA.Environ("TEMP") & "\Ausgabe.txt"
strSQL = "SELECT * FROM tblDaten"
Close #1
'Achtung Ausgabedatei wird durch jeden Prozeduraufruf überschrieben
'Falls die Datei nicht existiert wird sie erstellt
Open Datei For Output As #1
Set DB = CurrentDb()
Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset)
Do While Not RS.EOF
strDS = ""
For i = 0 To RS.Fields.Count - 1
strDS = strDS & RS.Fields(i) & "|"
Next i
strDS = VBA.Mid(strDS, 1, (VBA.Len(strDS)) - 1)
Parts = VBA.Split(strDS, "|")
For Each Part In Parts
If IsNumeric(Part) = False Then
If VBA.Len(strAusgabe) > 0 Then
strAusgabe = VBA.Mid(strAusgabe, 1, (VBA.Len(strAusgabe)) - 1)
Print #1, strAusgabe
End If
strAusgabe = ""
strAusgabe = Part & ";"
Else
strAusgabe = strAusgabe & Part & ";"
End If
Next Part
RS.MoveNext
Loop
'Letzten Datensatz schreiben
strAusgabe = VBA.Mid(strAusgabe, 1, (VBA.Len(strAusgabe)) - 1)
Print #1, strAusgabe
Close #1
RS.Close
Set RS = Nothing
DB.Close
Set DB = Nothing
End Sub
Da ich z.Z. nur Access 2007 zur Verfügung habe musst du evtl. in der Entwicklungsumgebung den Verweis auf die DAO-Bibliothek neu setzen...
Im VBA-Editor -> Menü Extras -> Verveise -> "Microsoft DAO ..."
Feedback fänd ich klasseGreetings ;-)
Antwort 3 von Coolpix vom 17.08.2019, 15:13 Options
upps....
Zitat:
Dim Schalter As Boolean
kannst du weglassen.
Greetings ;-)
Antwort 4 von erik vom 17.08.2019, 16:03 Options
Hallo!
Das sollte auch über eine Abfrage gelöst werden können. Dazu müssen mehrere Abfragen erzeugt werden, die nur die jeweiligen Teile zurückgeben. Danach können die einzelnen Abfragen ihre Ergebnisse über eine UNION-Abfrage untereinander zurückgeben.
Um eine korrekte Sortierung sicherzustellen, sollte in jeder Abfrage ein zusätzliches Sortierungsfeld aufgenommen werden, in der einfach nur eine fortlaufende Zahl angezeigt wird. In der UNION-Abfrage kann dann nach z.B. Primärschlüssel und dann nach diesem Sortierfeld sortiert werden.
Beispiel:
SELECT ID, Feld1, Feld2, Feld3, Feld4, 1 AS Sortierung
UNION
SELECT ID, Feld5, Feld6, Feld7, Feld8, 2 AS Sortierung
UNION
SELECT ID, Feld9, Feld10, Feld11, Feld12, 3 AS Sortierung
ORDER BY ID, Sortierung;
Die jetzt überflüssigen Spalten ID und Sortierung können in einer weiteren Abfrage unterdrückt werden:
SELECT Feld1, Feld2, Feld3, Feld4
FROM qryMeineAbfrage;
Hinweis: Die erste Abfrage in der UNION-Abfrage bestimmt die Namen der Felder.
Anschließend müsste ein passender
DoCmd.TransferText
für den Export reichen.
Viele Grüße
erik
Antwort 5 von Matty vom 20.08.2019, 15:45 Options
hallo Coolpix,
danke für die Antwort, deine Prozedur ist etwas komliziert (für mich).
Ich habe versucht, aber irgendwie nicht zurecht gekommen. Nachher habe ich gesehen, dass du meine Anfrage wohl nicht richtig interprettiert hast.
Die Zeichen "|" in meine Anfrage haben keine Bedeutung, dienten mir nur zur Darstellung der Tabellenspalten, dürfen nicht irgendwie in der Prozedur auftauchen.
Vielen Dank nochmal,
Gruss Matty
Antwort 6 von Matty vom 20.08.2019, 16:13 Options
Hallo erik,
du hast mir eine gute Idee gegeben. Habe das Problem, nicht wie du vorgetragen hast mit Abfragen gemacht, sondern über einen Bericht, bezüglich auf eine Abfrage.
Dort kann man in einen Textfeld ein Zeilenumbruch machen, an der Stelle wo man eben Braucht.
Die Felder werden in diesen Textfeld aneinendergereiht, wie z.B.
=[Vorname]&" "&[Nachname]&"
"&[Strasse]&" "&[Nummer]&"
"&[PLZ]&" "&[Ort]
Damit ergibt sich, natürlich mit anderen Angaben, genau das was ich wollte, eine Zeile in drei trennen. Dann dieses Bericht exportieren in Word und als *.txt abspeichern, Fertig. ;-)
Danke
Gruss Matty
Antwort 7 von Teddy7 vom 21.08.2019, 08:46 Options
Warum machst Du das nicht direkt in einer Abfrage ?
Da kann man Spalten hinzufügen und die können dann genauso aussehen.
Gruß
Teddy