role999
Goto Top

Access VBA-Skript Abfrageergebnis im CSV-Format in Textdatei schreiben

Hallo liebe Forenmitglieder,

ich habe mir ein VBA-Skript zusammenkopiert, das das Ergebnis einer (Access-) Abfrage in eine Textdatei schreiben soll. Dieses funktioniert prinzipiell bereits, die Ausgabe entspricht allerdings noch nicht ganz meinen Bedürfnissen.

Aktuell sieht die Ausgabe folgendermaßen aus (ohne Semikolon):

BE-009511 1 551576 4 StFaltenbalg-Saugnapf 1,5-fach 40mmFesto1372910
BE-009511 2 260221 1 StNäherungsschalter 24V M12Festo8152201


So muss das Ergebnis aussehen (mit Semikolon):
BE-009511;1;551576;4;St;Faltenbalg-Saugnapf 1,5-fach 40mm;Festo;1372910
BE-009511;2;260221;1;St;Näherungsschalter 24V M12;Festo;8152201


Dies ist aktuell meine VBA-Abfrage:
Private Sub Warenkorb_Datei_Click() ' Warenkorb.txt Datei mit Zeichnungen einer Anfrage erstellen  

Dim fileName As String
Dim rs As Recordset
Dim db As Database
Dim queryName As String
Dim f As Field
Dim MyValue1 As String

Dim Message, Title, Default, MyValue
Message = "Bitte Bestellnummer eingeben:"    ' Set prompt  
Title = "InputBox"    ' Set title.  
Default = ""    ' Set default  

MyValue1 = InputBox(Message, Title, Default)

queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.POSITION, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.MENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "'"  

fileName = "c:\Users\slro\Warenkorb.txt"  
Set db = CurrentDb
Set rs = db.OpenRecordset(queryName)

Open fileName For Output As #1

**
'Print #1, "     ";  
'For Each f In rs.Fields  
'Print #1, vbTab & f.Name;  
'Print #1, f.Name;  
'Next f  
'Print #1,  
Do While Not rs.EOF
'Print #1, Format(rs.AbsolutePosition + 1, "00000");  
For Each f In rs.Fields
'Print #1, vbTab & f.Value;  
Print #1, f.Value;
Next f
Print #1,
rs.MoveNext
Loop
**

Close #1

End Sub

Wie muss der zwischen ** markierte Code aussehen, so dass die einzelnen Spaltenwerte durch ";" getrennt ausgegeben werden?

Vielen Dank für die Unterstützung.

Content-Key: 6852255366

Url: https://administrator.de/contentid/6852255366

Printed on: April 27, 2024 at 21:04 o'clock

Mitglied: 6247018886
Solution 6247018886 Apr 20, 2023 updated at 15:13:26 (UTC)
Goto Top
Machs doch gleich mit der dafür vorgesehenen Methode mit einer Querydef...
https://stackoverflow.com/questions/21205627/how-to-export-a-temporary-r ...
MyValue1 = InputBox(Message, Title, Default)
queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.POSITION, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.MENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "'"  
fileName = "c:\Users\slro\Warenkorb.txt"  

Set qdfTemp = CurrentDb.CreateQueryDef("zzzTemp", queryName)  
Set qdfTemp = Nothing
DoCmd.TransferText acExportDelim, , "zzzTemp", fileName, True  
DoCmd.DeleteObject acQuery, "zzzTemp"  
Wenn die CSV bestimmt Eigenschaften haben soll (z.B. Delimiter) kann man eine eigene Export-Defintion vorher anlegen und dann der Funktion "TransferText" als zweiten Parameter übergeben.
DoCmd.TransferText-Methode (Access)

Wenn du unbedingt bei deinem Skript bleiben willst
Private Sub Warenkorb_Datei_Click() ' Warenkorb.txt Datei mit Zeichnungen einer Anfrage erstellen  

Dim fileName As String
Dim rs As Recordset
Dim db As Database
Dim queryName As String
Dim f As Field
Dim MyValue1 As String
Dim line as String
dim fso as Object
dim file as Object
Dim Message, Title, Default, MyValue
Message = "Bitte Bestellnummer eingeben:"    ' Set prompt  
Title = "InputBox"    ' Set title.  
Default = ""    ' Set default  
MyValue1 = InputBox(Message, Title, Default)

queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.POSITION, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.MENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "'"  

fileName = "c:\Users\slro\Warenkorb.txt"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set file = fso.OpenTextFile(fileName, 2, True, -2)
Set db = CurrentDb
Set rs = db.OpenRecordset(queryName)
rs.MoveFirst
While Not rs.EOF
        line = ""  
        For Each f In rs.Fields
            line = line & f.Value & ";"  
        Next
        file.WriteLine Left(line, Len(line) - 1)
        rs.MoveNext
Wend
file.Close
End Sub


Cheers briggs
Member: Role999
Role999 Apr 26, 2023 at 05:24:04 (UTC)
Goto Top
Hallo Briggs,

vielen vielen Dank für die Hilfe. Das Skript funktioniert wie gewünscht - Top!

Wie kann ich es erreichen, dass die in die Textdatei ausgelagerten Datensätze in einer bestimmten Sortierung ausgegeben werden?

queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.USERPOS, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.EKMENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "'"  

Ich möchte die Datensätze aufsteigend nach der Spalte BESTELLUNGPOS.USERPOS sortiert in die Textdatei schreiben.

Vielen Dank und einen schönen Tag wünscht
Roland
Mitglied: 6247018886
Solution 6247018886 Apr 26, 2023 updated at 05:44:18 (UTC)
Goto Top
Vor dem Durchlauf der Schleife das Recordset sortieren. Entweder direkt in deiner SQL Clause mit ORDER BY SPALTENNAME
queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.POSITION, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.MENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "' ORDER BY BESTELLUNGPOS.USERPOS"  

oder mittels Sort Property des Recordset
https://learn.microsoft.com/de-de/office/client-developer/access/desktop ...

Cheers
Member: Role999
Role999 Apr 26, 2023 at 09:00:13 (UTC)
Goto Top
Super, funktioniert wie es soll.

Auf diese Idee bin ich auch selbst schon gekommen, habe aber die Anführungszeichen falsch gesetzt und deshalb einen Laufzeitfehler erhalten.

Jetzt klappts. Vielen Dank!

Viele Grüße