Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: dobby110 am August 04, 2021, 08:53:13

Titel: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: dobby110 am August 04, 2021, 08:53:13
Hallo zusammen, ich komme einfach nicht weiter.
Ich versuche verzweifelt das Ergebnis einer Abfrage in eine .txt oder .csv Datei zu exportieren.

Der Export funktioniert natürlich grundsätzlich, aber ich bekomme das Format nicht geregelt.

Ich möchte eine .txt Datei erstellen, in der die Felder durch ein Semicolon getrennt werden.
Man sollte meinen, das wäre ganz einfach, aber stattdessen bekomme ich eine komische Tabellendarstellung.
Zur Ansicht habe ich eine solche Exportdatei hier mal hochgeladen. Das Problem besteht vermutlich darin, dass sich die Abfrage aus mehreren Parametern zusammensetzt.
D.h. ich ziehe mir den Wert des Remaining Commitments bspw. aus einer anderen Abfrage. Das ist also ein wenig verschachtelt und genau dieser Umstand scheint das Problem zu verursachen.

Ich habe auch schon versucht ein Formular zu erstellen, welches auf der Abfrage basiert und dieses dann zu exportieren. Aber egal was ich versuche, das Ergebnis ist immer identisch.

Alternativ habe ich auch schon eine .csv Datei versucht. Die sieht aber genauso aus wie die .txt-Datei und es steht in jeder zweiten Zeile eine Trennlinie. Da diese Exportdatei weiterverarbeitet werden soll, funktioniert das alles nicht. Ich brauche eine einfache .txt oder .csv Datei, welche lediglich durch Semicolon getrennt wird.

Hat jemand eine Idee, wie ich das Problem lösen kann?
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: MzKlMu am August 04, 2021, 09:03:26
Hallo,
das Wichtigste fehlt, wie sieht die Abfrage aus und wie wird exportiert.
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: PhilS am August 04, 2021, 09:45:33
Zitat von: dobby110 am August 04, 2021, 08:53:13Ich möchte eine .txt Datei erstellen, in der die Felder durch ein Semicolon getrennt werden.
Man sollte meinen, das wäre ganz einfach, aber stattdessen bekomme ich eine komische Tabellendarstellung.
Diese "komische Tabellendarstellung" bekommst du meines Wissen nur dann, wenn du im ersten Dialog für den Export ankreuzt "Export data with formatting and layout".
Wenn du das nicht tust, startet der "Export Text Wizard" in dem du die technische Formatierung der zu exportierenden Datei in Form einer Export Spezifikation definieren kannst.
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: dobby110 am August 04, 2021, 10:09:15
Das ist richtig. Üblicherweise kann man das einstellen, wenn dort das Häkchen nicht gesetzt wird.
In meinem Fall ist das Häkchen aber vordefiniert. Ich habe keine Möglichkeit, dieses zu entfernen.

Ich füge hier noch ein Screenshot meiner Abfrage an. Diese habe ich mit dem Abfrage-Assistenten erstellt.
Der Export erfolgt über den Menüpunkt Externe Daten - Exportieren Textdatei
Auch hiervon füge ich ein Screenshot ein.

Gäbe es noch eine andere Möglichkeit?
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: dobby110 am August 04, 2021, 10:31:43
Zitat von: dobby110 am August 04, 2021, 10:09:15Gäbe es noch eine andere Möglichkeit?

Evtl. lässt sich so ein Export auch über VBA programmieren?
Dazu fehlen mir aber die Kenntnisse. Oder werde ich mit dieser Variante auf das gleiche Problem stoßen?
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: DF6GL am August 04, 2021, 11:00:12
Hallo,

ja, sicher...

Schau Dir die Docmd.TransferText-Methode an. Die Hilfe gibt ausführliche Infos zu den verwendbaren Parametern, u. a. auch zu der (nötigen) Exportspezifikation.

Zum ausgegrauten Haken kann ich jetzt nichts sagen, kenne deine Umgebung nicht genau. Aber andere Punkte solltest Du ändern:


1) Benutze keine Reservierten Wörter  (---> "Name")   und entferne Sonder- und Leerzeichen aus Objektnamen.

2) Entferne den Parameter aus der Abfrage und setze ein festes Kriterium ein, bzw. bearbeite den SQL-String so, dass per VBA ein aktuelles Kriterium eingesetzt wird.

Der Parameter schlägt beim Export in eine Textdatei fehl mit "1 Parameter wurde erwartet....",  beim Export nach Excel funktioniert eine solche Parameterabfrage dagegen.  In diesem Fall könnten die Exceldaten anschließend als csv-Datei gespeichert werden.

3) Weiterhin gibt es die Möglichkeit, die in ein Recordset eingelesenen Daten mit "Print #" oder Write #" - Anweisung in eine Text-Datei zu schreiben.


Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: PhilS am August 04, 2021, 11:09:46
Zitat von: dobby110 am August 04, 2021, 10:09:15Das ist richtig. Üblicherweise kann man das einstellen, wenn dort das Häkchen nicht gesetzt wird.
In meinem Fall ist das Häkchen aber vordefiniert. Ich habe keine Möglichkeit, dieses zu entfernen.
Probier mal die Abfrage links im Navigationsbereich zu selektieren, und dann aus dem Kontext-Menü "Exportieren..." zu starten.
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: dobby110 am August 04, 2021, 11:30:03
Zitat von: PhilS am August 04, 2021, 11:09:46
Zitat von: dobby110 am August 04, 2021, 10:09:15Das ist richtig. Üblicherweise kann man das einstellen, wenn dort das Häkchen nicht gesetzt wird.
In meinem Fall ist das Häkchen aber vordefiniert. Ich habe keine Möglichkeit, dieses zu entfernen.
Probier mal die Abfrage links im Navigationsbereich zu selektieren, und dann aus dem Kontext-Menü "Exportieren..." zu starten.

funktioniert leider nicht. Fehlermeldung lautet wie zuvor beschrieben "1 Parameter wurde erwartet...."
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: dobby110 am August 04, 2021, 11:31:25
Zitat von: DF6GL am August 04, 2021, 11:00:122) Entferne den Parameter aus der Abfrage und setze ein festes Kriterium ein, bzw. bearbeite den SQL-String so, dass per VBA ein aktuelles Kriterium eingesetzt wird.


das würde ich sehr gerne machen. Aber ich verstehe kein Wort. :-)
Wie muss ich da vorgehen oder wo finde ich Informationen darüber, wo ein solcher Prozess beschrieben wird?
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: DF6GL am August 04, 2021, 12:12:13
Hallo,

versuch erst mal, ein festes Kriterium ins Kriterium-Feld zu schrieben und dann die Abfrage (wie Phil geschrieben hat) zu exportieren. Wenn das geht, erstelle eine Exportspezifikation und exportiere anschließend die Abfrage mit der Docmd.Transfertext-Methode per VBA.



Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: dobby110 am August 04, 2021, 12:46:04
das hat funktioniert. Dann kann ich die Abfrage wie gewünscht exportieren. :-) :-)

Jetzt das ABER:

ich habe in der beschriebenen Abfrage "abf_Massnahmen_mit_Valuta_SST" ein festes Datum hinterlegt.
Es muss aber das gleiche Datum in einer verschachtelten Abfrage genutzt werden, damit das korrekte remaining Commitment berechnet wird. Dieses Feld verursacht meiner Meinung die Probleme.

kurz zur Erklärung.

In meiner abgebildeten Abfrage soll das remaining Commitment angezeigt werden.
Dieser Wert wird aus der Abfrage "abf_alle_Massnahmen_bis_Valuta_für_Remaining_Commitment" gezogen.

Diese bezieht ihre Daten wiederum aus einer weiteren Abfrage: "abf_alle_Massnahmen_bis_Valuta"

Ich musste das so aufbauen, weil in meiner Tabelle "Massnahmen" nicht alle Positionen berücksichtigt werden dürfen.
Um das korrekte remaining Commitment zu dem gewünschten Datum zu errechnen, muss ich die Massnahmen bis zu dem Datum beschränken. Also generiert die Abfrage "abf_alle_Massnahmen_bis_Valuta" einfach nur 1 zu 1 die Daten aus Tabelle "Massnahmen" kleiner/gleich dem gesetzten Datum. --> da Werte größer dem gesetzten Datum nicht berücksichtigt werden dürfen.
 
Das kann ich dann als Grundlage nutzen, um das richtige remaining Commitment errechnen zu können.
Die Abfrage "abf_alle_Massnahmen_bis_Valuta_für_Remaining_Commitment" zieht dann einfach die Summen aus den Feldern, Commitment, Capital Calls, Distribution1 und Distribution2 und errechnet daraus das remaining Commitment, so dass ich mir diesen Wert in die aktuelle Abfrage ziehen kann, um die es hier geht.

Ich hoffe das war einigermaßen verständlich ausgedrückt und man kann die Problematik erkennen?

Das Datum fest zu hinterlegen, muss also für beide Abfragen berücksichtigt werden.

Screenshot der anderen beiden Abfragen habe ich angefügt, falls es hilft.
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: DF6GL am August 04, 2021, 14:55:25
Hallo,

ZitatIch musste das so aufbauen, weil in meiner Tabelle "Massnahmen" nicht alle Positionen berücksichtigt werden dürfen.

bezweifle ich, aber ich kenne, wie gesagt, Deine Situation nicht..


Wie auch immer,  man könnte

1) die Parameters-Auflistung in einer SQL-Abfrage heranziehen, um die Parameter zur Laufzeit auf den aktuellen Wert (per VBA) zu setzen.

https://docs.microsoft.com/de-de/office/client-developer/access/desktop-database-reference/parameters-declaration-microsoft-access-sql?form=MY01SV&OCID=MY01SV

2) eine Dummy-Where-Condition in den betreffenden Abfragen einsetzen und diese (per VBA) durch eine aktuelle Where-Condition ersetzen   (Kriterium:  1=1 ,wird von Access übersetzt in SQL:  Where ((1)=1)    ).
(1)=1 im SQL-String ersetzen durch z. B. [MeinFeld] = 25  und diesen modifizierten SQL-String einer neuen Abfrage zuweisen, die dann für den Export benutzt wird.

3) dedizierten Parameter(namen) im Kriterienfeld einsetzen und diesen wie bei 2) durch den aktuellen Wert ersetzen.



Für alles braucht es halt ein bisschen VBA


Wenn Du das alles scheust, dann bleibt eigentlich nur der Weg über Export nach Excel (weil die Parameter-Abfrage hier greift, bzw. funktioniert) und Abspeichern der Excel-Daten in eine csv-Datei.


Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: ebs17 am August 05, 2021, 09:05:59
Zum Umgang mit Parametern könntest Du hier querlesen:
Grundlagen - SQL ist leicht (16) - Abfragen mit Parametern (https://www.ms-office-forum.net/forum/showthread.php?p=2028899#post2028899)
In jedem Fall sollte man seine Parameter schon vor Aufruf der Abfrage kennen und somit bereitstellen können, z.B. in einem Formular, mit dem man den Export aufruft.

Relativ einfach dürfte die Variante 4) nach dem Link sein.
Titel: Re: Export einer Abfrage in eine .csv oder .txt Datei
Beitrag von: DF6GL am August 05, 2021, 09:15:50
Hallo,

eine weitere Variante wäre, ein Tempvars-Element als Kriterium zu verwenden...