「No Current Record」を過ぎて「Item」=「Item」である次のレコードに移動するにはどうすればよいですか
ループが戻ってきて、rsSO で Sales Order レコードを見つけますが、rsInv または Inventory レコードセットでは見つけず、「レコードが見つかりませんエラー」を作成します。その理由は、在庫をオープン セールス オーダーに割り当てて枯渇させた後、その特定のアイテムの在庫レコードを削除しても、そのアイテムのオープン セールス オーダーが残っている可能性があるためです。rsInv で在庫がなくなったら、Open Sales Order rsSO レコードセットの次のアイテムに移動するにはどうすればよいですか?
最初のループ内のコードの次のセクションで発生しています。
Do Until rsInv!Item = rsSO!Item
If rsInv!Item = rsSO!Item Then
Exit Do
Else
rsInv.MoveNext
End If
Loop
コード全体:
Public Function UpdateInventoryIntl()
Dim rsInv As DAO.Recordset, rsSO As DAO.Recordset, db As DAO.Database
Dim qdf As DAO.QueryDef
Dim AllocationQty As Long, SaleOrderRemainder As Long
Set db = CurrentDb
Set rsInv = CurrentDb.OpenRecordset( _
"SELECT * FROM [tbl_InventoryAvailForIntl] ORDER BY [Item] DESC,[QOH_IntlAllocation] DESC", _
dbOpenDynaset)
Set rsSO = CurrentDb.OpenRecordset("SELECT * FROM [tbl_IntlAllocated] ORDER BY [Item] DESC,[Qty_Open] DESC", _
dbOpenDynaset)
Do Until rsSO.RecordCount = 0
Do Until rsInv!Item = rsSO!Item
If rsInv!Item = rsSO!Item Then
Exit Do
Else
rsInv.MoveNext
End If
Loop
AllocationQty = IIf(rsSO!Qty_Open > rsInv!QOH_IntlAllocation, rsInv!QOH_IntlAllocation, rsSO!Qty_Open)
db.Execute ("INSERT INTO tbl_IntlAllocatedResults (Due_Date, Sale_Order_Num, SO_Line, Item, Qty_OpenStart, Location, Lot, QtyAllocated) " & _
"VALUES (#" & rsSO!Due_Date & "#,'" & rsSO!Sale_Order_Num & "'," & rsSO!SO_Line & ",'" & rsSO!Item & "'," & rsSO!Qty_OpenStart & ",'" & rsInv!Location & "','" & rsInv!Lot & "'," & AllocationQty & ");")
rsSO.Edit
rsSO!Qty_Open = rsSO!Qty_Open - AllocationQty
rsSO.Update
If rsSO!Qty_Open = 0 Then
rsSO.Delete
rsSO.MoveNext
End If
rsInv.Edit
rsInv!QOH_IntlAllocation = rsInv!QOH_IntlAllocation - AllocationQty
rsInv.Update
Debug.Print rsInv!QOH_IntlAllocation
If rsInv!QOH_IntlAllocation = 0 Then
rsInv.Delete
rsInv.MoveNext
End If
Loop
rsSO.Close
Set rsSO = Nothing
Set qdf = Nothing
rsInv.Close
Set rsInv = Nothing
End Function