Liebe Forumsmitglieder,
die Datenbank ist mit Access 2016 erstellt.. Meine Kenntnisse in VBA sind jedoch sehr gering. Der verwendete Code wurde mir hier im Forum zur Verfügung gestellt. Nun habe nur das Feld " DTLInternelieferscheinnummer" hinzugefügt.
Mit Hilfe des VBA Codes werden aus der Tabelle "Fertigungsaufträge" Datenwerte in die Tabelle "Chargen" kopiert. In diesem Prozessschritt werden in der Tabelle "Chargen" zu jedem Datensatz entsprechend der Verpackungsmenge einzelne Chargen gebildet.
Mein Problem ist, dass nach dem Kopieren aus der Tabelle " Fertigungsaufträge beim Einfügen in die Tabelle " Chargen" die Daten der Felder "Menge" und "DTLInterneLieferscheinummer" vertauscht werden.
Der Inhalt des Datenfeldes " Menge" aus der Tabelle "Fertigungsaufträge" wird in der Tabelle "Chargen" in das Feld " DTLInternelieferscheinnummer" übertragen und der Inhalt des Datenfeldes "Menge" in das Datenfeld "DTLInternelieferscheinnummer".
Hoffentlich könnt Ihr mir hier weiterhelfen. Ich weiss nicht wo der Fehler liegt. Es wäre Klasse wenn Ihr mir hier helfen könntet.
Vielen Dank
Markus
Public Sub createCharges()
Dim db As DAO.Database
Dim rs As DAO.Recordset, rs1 As DAO.Recordset
Dim lngAnzahl As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Fertigungsaufträge WHERE erledigt = 0;")
If rs.RecordCount = 0 Then
MsgBox "Keine zu bearbeitenden Lieferungen gefunden.", vbInformation
GoTo cleanUp
End If
Do While Not rs.EOF
Set rs1 = db.OpenRecordset("SELECT Verpackungsmenge FROM Artikelstammdaten WHERE ArtikelNr = '" & rs.Fields("ArtikelNr") & "';")
If rs1.RecordCount = 0 Then
MsgBox "Zur Lieferung" & vbCrLf & vbCrLf & _
rs.Fields("ID") & " | " & rs.Fields("ArtikelNr") & " | " & rs.Fields("Menge") & " | " & rs.Fields("Chargennummer") & vbCrLf & vbCrLf & _
"wurden keine Stammdaten gefunden.", vbInformation, "Überspringe Fertigungsaufträge"
GoTo cleanUp
Else
Dim lngMenge As Long
Dim lngVerpackungsmenge As Long
Dim lngCount As Long
lngMenge = rs.Fields("Menge")
lngVerpackungsmenge = rs1.Fields("Verpackungsmenge")
Do While lngMenge > 0
Select Case lngMenge
Case Is >= lngVerpackungsmenge
db.Execute ("INSERT INTO Chargen (ArtikelNr, Menge, DTLInterneLieferscheinnummer) VALUES ('" & rs.Fields("ArtikelNr") & "','" & rs.Fields("DTLInterneLieferscheinnummer") & "', " & lngVerpackungsmenge & ");")
Case Is < lngVerpackungsmenge
db.Execute ("INSERT INTO Chargen (ArtikelNr, Menge, DTL interne Lieferscheinnummer) VALUES ('" & rs.Fields("ArtikelNr") & "','" & rs.Fields("DTLInterneLieferscheinnummer") & "', " & lngMenge & ");")
End Select
lngCount = lngCount + 1
lngMenge = lngMenge - lngVerpackungsmenge
Loop
End If
db.Execute ("UPDATE Fertigungsaufträge SET erledigt = -1 WHERE ID = " & rs.Fields("ID") & ";")
rs.MoveNext
Loop
MsgBox "Verarbeitung erfolgreich, es wurden " & lngCount & " Chargen erstellt.", vbInformation
cleanUp:
If Not rs1 Is Nothing Then Set rs1 = Nothing
If Not rs Is Nothing Then Set rs = Nothing
If Not db Is Nothing Then Set db = Nothing
End Sub
|