按特定顺序处理记录

时间:2014-03-20 17:46:29

标签: ms-access access-vba

我有2张桌子。一个是我们需要发货的订单。有一个发货日期,零件号和所需数量,以及订单#(以及其他字段)。第二个表包含供应商订购的零件。它有采购订单#,数量和零件号。

我需要做的是按特定顺序处理VBA中的订单表。它需要"排序"按日期发货(最早的日期),然后按订单号。我有代码(下面)将PO#添加到订单表中,这样我就可以看到我需要的商品是什么PO。问题是代码没有考虑我希望它处理的顺序。我已经明白表格不是电子表格,而且订单不是我保证的。

如果能够按指定的顺序处理此操作,我需要做什么。我已经在下面包含了我的代码,该代码可以正常工作,而不是按照请求的顺序处理。

Public Sub Magic()

Dim SOQi As Integer
Dim POQi As Integer
Dim PONi As Long

Dim db As Database
Dim SOrs As Recordset
Dim POrs As Recordset2

Set db = CurrentDb
Set SOrs = db.OpenRecordset("T_openorders")
Set POrs = db.OpenRecordset("T_InboundPO")

SOrs.MoveFirst
Do Until SOrs.EOF
    If SOrs.Fields("missing") < 0 Then
    POrs.MoveFirst
        Do Until POrs.EOF
           SOQi = SOrs.Fields("missing")
                If POrs.Fields("OrderQty") > 0 Then
                        POQi = POrs.Fields("OrderQty")
                        If POrs.Fields("PartNum") = SOrs.Fields("PartNum") Then
                            If Abs(POQi) > Abs(SOQi) Then
                                POQi = POQi + SOQi
                                PONi = POrs.Fields("PONUM")
                                POrs.Edit
                                POrs("OrderQty") = POQi
                                POrs.Update
                                SOrs.Edit
                                SOrs("PONum") = PONi
                                SOrs("missing") = 0
                                SOrs.Update
                             Else
                                SOQi = POQi + SOQi
                                PONi = POrs.Fields("PONUM")
                                POrs.Edit
                                POrs("OrderQty") = 0
                                POrs.Update
                                SOrs.Edit
                                SOrs("PONum") = PONi
                                SOrs("missing") = SOQi
                                SOrs.Update
                            End If
                        End If
                    End If
            POrs.MoveNext
        Loop
    End If
SOrs.MoveNext
Loop



SOrs.Close

Set SOrs = Nothing
Set POrs = Nothing
db.Close

End Sub

1 个答案:

答案 0 :(得分:0)

使用SELECT查询作为记录集的数据源。在查询中,您可以包含ORDER BY子句,并且记录将按顺序加载到记录集中。

我忘记了你的桌子和田野名称,所以我自己做了。

Dim db As Database
Dim rs As DAO.Recordset
Dim strSelect As String

strSelect = "SELECT y.* FROM YourTable AS y" & vbCrLf & _
    "ORDER BY y.[ship by date], y.[order number];"
Debug.Print strSelect

Set db = CurrentDb
Set rs = db.OpenRecordset(strSelect)
' loop through the recordset row to confirm
' data is present in correct order ...
Do While Not rs.EOF
    Debug.Print rs![ship by date], rs![order number]
    rs.MoveNext
Loop