MS-Access 2021:如何用交易表字段更新主库存表库存值
Access库存自动更新解决方案(按交易类型加减)
一、用更新查询批量处理交易记录
如果是批量处理已录入的交易记录,用更新查询最直接:
- 创建新的更新查询,添加
MasterInventory和InventoryTransactions表,通过物品唯一标识字段(比如ItemID,需确保两个表都有这个字段)建立关联。 - 双击
MasterInventory.QuantityOnHand字段添加到查询网格,在「更新到」行输入以下表达式:IIf([InventoryTransactions].[TransactionType]="Addition", [MasterInventory].[QuantityOnHand]+[InventoryTransactions].[Quantity], [MasterInventory].[QuantityOnHand]-[InventoryTransactions].[Quantity]) - 可选:为避免重复更新,建议给
InventoryTransactions加一个IsProcessed字段(是/否类型),在查询条件行设置IsProcessed=False,处理完后把该字段标记为True。 - 点击「视图」→「数据表视图」预览要更新的记录和计算值,确认无误后再运行查询。
二、表单录入时实时更新库存
如果要在录入交易的同时自动更新库存,用表单VBA实现:
- 打开
InventoryTransactions的表单设计视图,找到「属性表」→「事件」→「更新后」,点击右侧的「...」打开VBA编辑器。 - 粘贴以下代码(注意替换成你实际的字段/控件名称):
Private Sub Form_AfterUpdate() Dim db As DAO.Database Dim rs As DAO.Recordset Dim newQty As Long Set db = CurrentDb() ' 打开对应物品的库存记录 Set rs = db.OpenRecordset("SELECT QuantityOnHand FROM MasterInventory WHERE ItemID = " & Me.ItemID) If Not rs.EOF Then rs.Edit ' 根据交易类型计算新库存 Select Case Me.TransactionType Case "Addition" newQty = rs!QuantityOnHand + Me.Quantity Case "Removal" newQty = rs!QuantityOnHand - Me.Quantity ' 可选:防止库存出现负数 If newQty < 0 Then newQty = 0 End Select rs!QuantityOnHand = newQty rs.Update End If ' 清理对象 rs.Close Set rs = Nothing Set db = Nothing ' 刷新库存表单(如果有显示库存的表单) Forms!MasterInventoryForm.Requery ' 替换为你的库存表单名称 End Sub - 保存表单,测试录入:选择交易类型、输入数量、保存记录,查看
MasterInventory的QuantityOnHand是否同步更新。
关键注意事项
- 两个表必须通过唯一物品ID关联,否则无法定位到对应库存记录。
- 运行更新查询前务必备份数据,避免误操作导致数据丢失。
- VBA代码中的字段名、控件名要和你的实际表/表单完全一致,比如
Me.ItemID是表单上绑定物品ID的控件名称。
内容的提问来源于stack exchange,提问作者Landon.C
相关产品推荐
相关产品推荐

