lsckronach
Goto Top

Datensatz nach Anzahl vervielfältigen

Hallo zus.,
ich habe folgende Rohdaten (Eingang) zu einer Bestellung. Diese müssen wenn die Anzahl des Datensatzes (z.B. 5 Stück) sind,
ausgelesen und einzeln in eine andere Datei (Lagerbuchung) geschrieben werden. Wie kann dies am einfachsten gelöst werden ? Die Datenstruktur ist immer gleich. Wenn diese Daten einzeln (Menge 1 Stück) zur Verfügung stehen werden Etiketten über einen Drucker erzeugt. Diesen Druckjob wollte ich über eine kleine Abfrage mit MS Access lösen. Die Abfrage greift schon, ich scheitere nur an der vervielfältigung der Datensätze.


Rohdaten (Eingang):

97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000010;70905001;580;Bezeichnung; 1,000;ST;HRL;20120723
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000020;90456976;190;Bezeichnung; 1,000;ST;3/12/10/06;20120723
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 5,000;ST;3/21/11/04;20120723

Zieldatei (Lagerbuchung):

97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000010;70905001;580;Bezeichnung; 1,000;ST;HRL;20120723
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000020;90456976;190;Bezeichnung; 1,000;ST;3/12/10/06;20120723
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;1/5
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;2/5
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;3/5
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;4/5
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;5/5


Vielen Dank für eure Unterstützung

Gruß Dirk

Content-ID: 188596

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

Ausgedruckt am: 16.11.2024 um 03:11 Uhr

NetWolf
NetWolf 25.07.2012 um 16:00:50 Uhr
Goto Top
Moin Moin,

ich gehe davon aus, dass die Informationen in Felder geschrieben werden. D.h. meine Annahme: Rohdaten ist eine Tabelle.

Baue in VBA ein Schleife, die die Rohdaten durchgeht.
Wenn dann bei Anzahl ein 5 steht sind folgende Schritte notwendig:

1- Anzahl merken
2- Datensatz ändern: Anzahl = 1 / Teilvon = 1/5
3- Datensatz kopieren
4- Schleife bis Anzahl-1 erreicht wird
4- kopierten Datensatz als neuen einfügen
5- neuen Datensatz ändern: Teilvon = 2/5
usw.
6- Ende Schleife bis Anzahl erreicht wird

Grüße aus Rostock
Wolfgang
(Netwolf)
lsckronach
lsckronach 26.07.2012 um 07:29:57 Uhr
Goto Top
Moing Wolfgang,

diesen gedanken habe ich auch schon gefasst.

Ich habe ein Problem mit der Schleife wie der Code aussehen soll ? face-sad

In der Tab. Komm_tmp befinden sich die Rohdaten und sollen nach der Schleife
in die tblVerarbeitung eigefügt werden. Im Feld FMenge ist die Anzahl (Stück).
In der Tabelle "Faktura" (97806850) befindet sich der Datensatz welcher gedruckt bzw. geprüft werden soll.
Es sollen alle Felder nach der Prüfung aus der Tab. "Komm_tmp" in die "tblVerarbeitung" (einzeln) eingefügt werden.

Private Sub Befehl21_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim lngCounter As Long
Dim strSQL As String

Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT * FROM Komm_tmp")
If rs.RecordCount > 0 Then
rs.MoveFirst
Do Until rs.EOF
If Nz(rs.Fields("Fmenge"), "") <> "" Then

*da is der Wurm drin**

For lngCounter = 1 To FMenge

strSQL = "INSERT INTO tblVerarbeitung (Faktura)" _
& " values (Me!Faktura.Text)"

db.Execute strSQL, 128 'dbFailOnError ', 128 'dbFailOnError hinzugefuegt

Next lngCounter
Else
MsgBox "Fehler in Datensatz, keine Datensätze vorhanden"
End If
'Wenn die Sollkopienzahl in die neue Tabelle geschrieben wurde,
'weiter mit dem nächsten rs der Herkunftstabelle... und loop
rs.MoveNext
Loop
End If
NetWolf
NetWolf 27.07.2012 um 20:50:12 Uhr
Goto Top
Hi,

du solltest auch 2 Tabellen/Abfragen öffnen, wenn du beide bearbeiten willst. Oder wenn du eine ID hast, kann man das auch per SQL lösen.

Also poste hier mal bitte die Struktur beider Tabellen mit Feldnamen und Feldtypen.

Grüße aus München
Wolfgang
(Networlf)
lsckronach
lsckronach 31.07.2012 um 13:42:46 Uhr
Goto Top
Hallo Wolfgang,

es sind 3 Tabellen welche ich eingerichtet habe.

Tabelle "Faktura" (Textfelder)
Faktura / Datum

Tabelle "Import" (alles Textfelder, Menge als Integer)
Faktura / Name / Strasse / Land / PLZ / Ort / Kunde /Pos / Bezeichnung / Menge / Stellplatz /

97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000010;70905001;580;Bezeichnung; 1,000;ST;HRL;20120723
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000020;90456976;190;Bezeichnung; 1,000;ST;3/12/10/06;20120723
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 5,000;ST;3/21/11/04;20120723


Tabelle "Lager" (alles Textfelder, Menge als Integer)
Faktura / Name / Strasse / Land / PLZ / Ort / Kunde /Pos / Bezeichnung / Menge / Stellplatz /

97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000010;70905001;580;Bezeichnung; 1,000;ST;HRL;20120723
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000020;90456976;190;Bezeichnung; 1,000;ST;3/12/10/06;20120723
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;1/5
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;2/5
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;3/5
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;4/5
97806850;Name;;Strasse;Land;PLZ;Ort;000030001;000000030;34018;440;Bezeichnung; 1,000;ST;3/21/11/04;20120723;5/5

In der Tabelle "Fakura" befindet sich 1 Datensatz welcher aus der Tabelle "Import" vervielfältigt werden muss und in dieser Beziehung in der Tabelle "Lager" abgelegt werden. Wenn die Anzahl z.B. 5 Stück ist, so muss die 1/5 -5/5 mit ausgegeben werden.

Wenn Du mir die emailadresse gibts, kann ich Dir auch die Tabelle zusenden

Gruß Dirk
lsckronach
lsckronach 10.08.2012 um 07:44:25 Uhr
Goto Top
Hallo Wolfgang,

bin schon etwas weiter, jetzt wird aber nur die erste bzw. aktuelle Zeile vervielfältigt.
Mit welchen Befehl wir die schleife mit allen Feldern durchsucht ?


Private Sub Befehl15_Click()

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Komm_Import_tmp")
For i = 1 To Me![Menge]
' With rst
With CurrentDb().OpenRecordset("tblVerarbeitung", dbOpenDynaset, dbAppendOnly)

.AddNew
!Faktura = Me![Faktura]
!Name1 = Me![Name1]
!Pos = Me![Pos]
!Mat = Me![Mat]
!Code = Me![Code]
!MatBez = Me![MatBez]
!Menge = 1
'...
.Update
.Close
End With
Next i

End Sub