Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Zeilenumbruch in der Ausgabedatei





Frage

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 1 von Teddy7

das ist m.E. nur mit VBA-Programmierung möglich.

Gruß
Teddy

Antwort 2 von Coolpix

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 klasse

Greetings ;-)

Antwort 3 von Coolpix

upps....

Zitat:
Dim Schalter As Boolean


kannst du weglassen.

Greetings ;-)

Antwort 4 von erik

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

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

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

Warum machst Du das nicht direkt in einer Abfrage ?

Da kann man Spalten hinzufügen und die können dann genauso aussehen.

Gruß
Teddy

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: