一個人解決了我的問題,所以關閉我的問題我想補充的答案如下:
創建新表「PACKINGLIST」包含字段「BoxNo」(龍),「PONO」(文本),「 TotalBooks「(長),」StartNo「(長)和」EndNo「(長)。主鍵開啓(BoxNo,PONo)。
然後下面的代碼應該給你結果。
Public Sub PackBooks()
Dim db As DAO.Database
Dim bk As DAO.Recordset ' Books
Dim qdf As DAO.QueryDef
Dim BoxNo As Long ' No of box currently being packed
Dim BooksInBox As Long ' How many books are already in the box that is currently being packed
Dim BooksPacked As Long ' How many books are already packed for the current PONo
Dim Remaining As Long ' How many books remain to be packed for the current PONo
Dim BooksToPack As Long ' How many books are to be packed for the current PONo into the current box
Dim StartNo As Long
Dim EndNo As Long
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", "Delete * From PackingList") ' start with an empty packing list
qdf.Execute dbFailOnError
qdf.Close
Set bk = db.OpenRecordset("Select * From Books Order By PONo")
If Not bk.EOF Then
BoxNo = 1
BooksInBox = 0
Do While Not bk.EOF
BooksPacked = 0
EndNo = 0
Do While BooksPacked < bk!TotalBooks
Remaining = bk!TotalBooks - BooksPacked
If Remaining >= 10 - BooksInBox Then
BooksToPack = 10 - BooksInBox
Else
BooksToPack = Remaining
End If
StartNo = EndNo + 1
EndNo = StartNo + BooksToPack - 1
Set qdf = db.CreateQueryDef("", " Insert Into PackingList (BoxNo, PONo, TotalBooks, StartNo, EndNo) " & _
" Values (" & BoxNo & ", '" & bk!PONo & "', " & bk!TotalBooks & ", " & StartNo & ", " & EndNo & ")")
qdf.Execute dbFailOnError
qdf.Close
BooksPacked = BooksPacked + BooksToPack
BooksInBox = BooksInBox + BooksToPack
If BooksInBox = 10 Then
BoxNo = BoxNo + 1
BooksInBox = 0
End If
Loop
bk.MoveNext
Loop
End If
Set qdf = Nothing
bk.Close
Set bk = Nothing
db.Close
Set db = Nothing
End Sub
爲什麼Box No 0002 Book 1〜8 PO-0002'沒有書本'1-10'? –
你是對的我犯了一個錯誤(我很着急),我必須改變list2 – masoud
對不起,列表2是好的,因爲po-0001的全部書籍是12本書,當我們把10本書放在箱子0001中時,我們有從12本書中剩下2本書,所以我們把這兩本書(第11〜12冊)放在0002 +第1〜8冊po-0002 – masoud