Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Ausgabe aller Datensätze einer Tabelle in eine Steuerdatei

Begonnen von ReneK, April 12, 2017, 11:33:18

⏪ vorheriges - nächstes ⏩

ReneK

Hallo.
Ich bin Anfänger und habe ein Problem.

Ich möchte via Access 2013 für einen Etikettendrucker eine Steuerdatei, die gewisse Steuerzeichen voraussetzt, erzeugen.
Daten aus einer Tabelle sollen ausgelesen, mit für den Drucker erforderlichen Steuerzeichen versehen, und dann in einer Datei abgespeichert werden.

Mein bissheriges Ergebnis sieht so aus:


r
M l LBL;Sond
R PG;xxxTest-Textxxx
R GROESSE;50
R UVP;10,00
R EANXX;123123123123
R EANGR;000000000050
R A;4
r
M l LBL;Sond
R PG;xxtestxx
R GROESSE;54
R UVP;20,00
R EANXX;123987654321
R EANGR;000000000050
R A;1



-Das kleine "r" bedeutet, das ein neues Etikett anfängt.
-Das "M" definiert das Label, welches auf dem Drucker gespeichert ist.
-Das große "R" definiert einen Feldnamen im Etikettenlayout. Die Feldnamen im meiner Tabelle und im Layout sind hier gleich (dazu unten mehr).
-R "PG", R "GROESSE" ... sind Feldnamen aus meiner Tabelle "Sond_Mehrfach".
-Im Feld "A" steht die Anzahl.
-Hinter dem ";" befindet sich der Feldinhalt.
-Hinter der letzten Zeile in der Datei muss mit Return abgeschlossen sein. Also eine neue Zeile ohne Inhalt. (Funktioniert!)

In dem Beispiel sind zwei also Steuersätze in der Textdatei "Sond_Me2.txt" gespeichert.
Das erste Etikett soll in der Anzahl (Feld A) 4x gedruckt werden, und das zweite 1x.


Nun mein Problem:
Ich gebe im Code jeder Zeile ein "R" zusätzlich mit, da dies vom Drucker benötigt wird.

Print #intFile, "R "; rs(i).Name & ";" & Nz(rs(i))


In der letzten Zeile bei dem "A" darf das aber ->nicht<- vorhanden sein.
Da muss einfach nur "A;4" oder "A;1" statt "R A;4" oder "R A;1" stehen.

Ich brauch Hilfe dabei, wie ich a) entweder davon weg komme, dass alle Spalten im Loop gleich behandelt werden, also das ich die Felder variabel selbst definiere, oder
b) wie ich aus dem String "R A;x" das "R " wieder entferne pro Datensatz.
Mit der Replace Methode habe ich keinen Erfolg. Oder ich wende es nicht richtig an.

Lieber wäre mir Variante a), weil ich da evtl. die Chance sehe die Feldnamen gleich in einen anderen Wert zu ändern (angenommen der Feldname in meiner Tabelle heißt "Text", der Drucker braucht aber nicht "Text" in der Steuerdatei sondern "Info"). Ich hoffe es ist verständlich.
Priniziell ist es aber egal, da ich mir die Tabellen selbst gestalten kann wie ich will.

Hat jemand eine Idee oder Workaround?
Wie gesagt, ich bin Anfänger und hab mir das zurecht gefrickelt aus Codeschnipseln die ich unter Google gefunden habe. Aber jetzt komm ich nicht mehr weiter, weil ich den Loop nicht verstehe, bzw. meinen Wünschen nicht anpassen kann.


Mein Code bisher:


Private Sub Btn_Drucken_Click()
On Error GoTo Err_Btn_Drucken_Click

  Dim rs            As DAO.Recordset
  Dim intFile       As Integer
  Dim i             As Integer

  Dim strcOutFile As String
  Dim strcDataSrc As String

strcOutFile = "C:\Temp\Sond_Me2.txt"
strcDataSrc = "Sond_Mehrfach"
 
  'Close #intFile
 
  intFile = FreeFile
  Open strcOutFile For Output As #intFile

  Set rs = DBEngine(0)(0).OpenRecordset( _
                                        strcDataSrc, _
                                        dbOpenForwardOnly, _
                                        dbReadOnly)
  With rs
    Do While Not .EOF

      Print #intFile, "r"
      Print #intFile, "M l LBL;Sond"
      For i = 0 To .Fields.Count - 1
              Print #intFile, "R "; rs(i).Name & ";" & Nz(rs(i))

      Next i
 
    .MoveNext
    Loop
   
    .Close
  End With
 
  Close #intFile
  Set rs = Nothing


'''''''''   Versuch: =OK: DIREKTEINGABE UEBER FORMULAR OHNE LOOP
'''''''''   EINZELETIKETTNACHDRUCK
'Print #intFile, "r"
'Print #intFile, "M l LBL;Sond"
'Print #intFile, "R PG;"; Me.Text
'Print #intFile, "R GROESSE;"; Me.GROESSE
'Print #intFile, "R UVP;"; Me.UVP
'Print #intFile, "R EANXX;"; Me.EAN
'Print #intFile, "R EANGR;"; Me.EANGR
'Print #intFile, "A"; Me.Anzahl


Exit_Btn_Drucken_Click:
    Exit Sub

Err_Btn_Drucken_Click:
    MsgBox Err.Description
    Resume Exit_Btn_Drucken_Click
   
End Sub


dedidado

Hallo,

diese Zeile:
ZitatPrint #intFile, "R "; rs(i).Name & ";" & Nz(rs(i))
durch folgendes ersetzen:
ZitatIf rs(i).Name = "A" Then
    Print #intFile, rs(i).Name & ";" & Nz(rs(i))
else
    Print #intFile, "R "; rs(i).Name & ";" & Nz(rs(i))
End If

Vorraussetzung dafür ist natürlich, dass sonst in keiner anderen Zeile ein "A" in dem Feld steht.

Lachtaube

Ich würde nur bis zum vorletzten Feld loopen und danach die Zeile für das letzte Feld eines jeden Datensatzes entsprechend anders ausgeben.   For i = 0 To .Fields.Count - 2
      Print #intFile, "R "; .Fields(i).Name & ";" & .Collect(i)
   Next
   ' i hat hier den Wert von .Count - 1
   Print #intFile, .Fields(i).Name & ";" & .Collect(i)
Grüße von der (⌒▽⌒)

ReneK