Ms access 如何将书籍分割/分发到箱子
我有一个列表,显示我们每个订单号有多少本书(按订单号排序),如下所示:Ms access 如何将书籍分割/分发到箱子,ms-access,Ms Access,我有一个列表,显示我们每个订单号有多少本书(按订单号排序),如下所示: **LIST 1:** **PO No** **TOTAL BOOKS** PO-0001 12 PO-0002 15 PO-0003 26 现在我想把这些书分为几箱,每箱最多10本。如下所示: LIST 2: **BOX NO** **BOOKS** **PO NO** 0001 BOO
**LIST 1:**
**PO No** **TOTAL BOOKS**
PO-0001 12
PO-0002 15
PO-0003 26
现在我想把这些书分为几箱,每箱最多10本。如下所示:
LIST 2:
**BOX NO** **BOOKS** **PO NO**
0001 BOOK 1~10 PO-0001
0002 BOOK 11~12 PO-0001
0002 BOOK 1~8 PO-0002
0003 BOOK 9~15 PO-0002
0003 BOOK 1~3 PO-0003
0004 BOOK 4~13 PO-0003
0005 BOOK 14~23 PO-0003
如何通过查询或编码从列表1中自动生成列表2?一个人解决了我的问题,因此在结束我的问题时,我添加了以下答案: 创建一个新表“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
Public Sub PackBooks()
Dim数据库作为DAO.Database
Dim bk作为DAO。记录集“书籍
将qdf设置为DAO.QueryDef
Dim BoxNo作为“当前正在包装的箱子编号”
Dim BooksInBox,只要“当前正在打包的箱子中已经有多少本书?”
“Dim books packed As Long”当前PONo已经打包了多少本书
“当前PONo还有多少书需要打包?”
Dim BooksToPack As Long“当前PONo要将多少本书打包到当前箱子中?”
暗淡的星星没有那么长
暗淡的尽头没有那么长
Set db=CurrentDb
设置qdf=db.CreateQueryDef(“,”从装箱单中删除“)”以空装箱单开始
qdf.executedbfailonerror
关闭
Set bk=db.OpenRecordset(“按PONo从图书订单中选择*)
如果不是bk.EOF,则
BoxNo=1
BooksInBox=0
不使用bk.EOF时请勿使用
书包=0
EndNo=0
当书籍包装=10-则
BooksToPack=10-图书收件箱
其他的
BooksToPack=剩余
如果结束
开始编号=结束编号+1
EndNo=StartNo+BooksToPack-1
设置qdf=db.CreateQueryDef(“,”插入到打包列表中(箱号、PONo、TotalBooks、开始号、结束号)&_
“值(“&BoxNo&”、“&bk!PONo&”、“&bk!TotalBooks&”、“&StartNo&”、“&EndNo&”)
qdf.executedbfailonerror
关闭
BooksPacked=BooksPacked+BooksToPack
BooksInBox=BooksInBox+BooksToPack
如果BooksInBox=10,则
BoxNo=BoxNo+1
BooksInBox=0
如果结束
环
下一步
环
如果结束
设置qdf=无
bk.关闭
设置bk=Nothing
db.关闭
Set db=Nothing
端接头
为什么第0002号箱第1~8本PO-0002
号箱没有书1-10
?你是对的,我犯了一个错误(我很匆忙)我必须更改列表2担心列表2没问题,因为PO-0001的总图书数是12本书,当我们将10本书放入第0001号箱时,我们从12本书中保留了2本书,所以我们将这2本书放入(第11~12本书)在第0002框+po-0002的第1~8册中-理解。请给我一分钟。书籍**需要像书籍1~10那样格式化吗?为什么不能说10呢?“`PO NO`将为您提供所有信息,然后您可以对表执行聚合,而不必使用VBA搜索字符串/子字符串