【发布时间】:2022-01-08 15:01:18
【问题描述】:
所以,我知道这听起来如何,您不应该将计算字段存储到 Access 表中。但是,这是我的情况:
我有一个表格,用户可以在其中输入包重量。表格底部有两个字段,用于计算所有棉包的总重量和棉包总数。这两个字段需要存储到我们的表中,以便我们可以跟踪每个班次的总数。
现在,我有两个计算字段,然后我有两个隐藏字段,它们具有表格的控制源。这两个隐藏字段实际上是这个包重子表单的父表单。当您输入新的包重量时,控件上会出现一个 OnClick 事件,该重量会使用表单的计算控件更新父隐藏控件。问题是:这些字段在输入新的包重量后不会立即更新,如果我将 requery、recalc、refresh 放入 afterupdate 事件中,字段会正确更新,但光标会转到第一条记录,这对用户非常不友好。更糟糕的是,有时有人必须删除或更改此表单中间的一堆记录,并且在每次单击和更新后,它都会将您带到顶部(如果我添加 DoCmd.GoToRecord,则将您带到底部,, AC 新纪录)。
TLDR:我需要一种更好的方法来将 12 小时轮班的所有棉包的总和存储到我们的表中。一种不涉及刷新的方法,因为如果需要更新记录,这会打乱光标的位置。
(我也尝试在棉包重量表格失去焦点后更新表格,但由于某种原因,这与立即更新总棉包重量和总棉包计数隐藏控件不一致)
【问题讨论】:
-
重新查询表单的Recordset,而不是表单,并且记录焦点不会改变:
Me.Recordset.Requery。或者在准备好提交记录之前不要更新总和字段。使用表格 BeforeUpdate 事件。这些总和应该可以在需要时“按班次”计算。 -
为什么要使用 OnClick 而不是数据控件的 AfterUpdate 事件?
-
编辑问题以显示将总和保存到父记录字段的代码。
-
Me.recordset.requery 完美运行,谢谢!从子表单切换到主表单时,我只是遇到了一个小问题,它给了我一个“这已被另一个用户编辑”的消息,我通过在子表单的 OnExit 事件中使用相同的代码来摆脱它.另外,我对 OnClick 事件犯了一个错误,它是一个 OnEnter 事件。但我确实将代码添加到 OnEnter 和 Afterupdate 以说明从主表单切换回包重量。完美运行。
标签: vba ms-access ms-access-2007