Ms access 为什么更新后DSUM在更新值之前

Ms access 为什么更新后DSUM在更新值之前,ms-access,vba,Ms Access,Vba,我有一个子表单,一个连续表单,由字段JobItemId过滤,它有一个字段Price,在Price更新后,我希望确定JobItemId的新价格总额,并将其传递到其他地方进行处理 我有以下代码: Private Sub Price_AfterUpdate() Dim TotalCost As Currency Dim strFilter As String strFilter = "[JobItemID] = " + Str(JobItemID.Value) TotalCos

我有一个子表单,一个连续表单,由字段JobItemId过滤,它有一个字段Price,在Price更新后,我希望确定JobItemId的新价格总额,并将其传递到其他地方进行处理

我有以下代码:

Private Sub Price_AfterUpdate()
   Dim TotalCost As Currency
   Dim strFilter As String
   strFilter = "[JobItemID] = " + Str(JobItemID.Value)
   TotalCost = DSum("[Price]", Me.Recordset.Name, strFilter)
   Me.Parent.Total = TotalCost
   Me.Parent.Update_FinalPrice
End Sub

我在TotalCost上设置了一个手表,以便验证传递的值,并发现total是更新之前的值。为什么会这样?我需要做什么才能得到正确的更新后总数?

您的代码在控件的更新后事件中触发。您需要将其移动到表单的AfterUpdate事件(即,
form\u AfterUpdate


DSum对提交到数据库的记录进行操作,但即使您的价格已在价格控制的AfterUpdate事件中更新,但尚未提交到数据库(Access通过在记录选择器中显示铅笔来表示这一点)。提交更新的记录后,立即触发Form_AfterUpdate事件。

谢谢,我通过刷新解决了这个问题!这显然是正确的方法。考虑到可以随时从子记录计算这些数据,您确定需要将这些数据存储在父记录中吗?我将总数向上推到父记录,然后乘以最终金额的边距。问题是,计算值没有触发最终成本级联更新的事件,正如您在我的另一个问题中看到的那样。因此,在某些方面,这只是解决该问题的一种方法。从子窗体中获取总计的常用方法是在子窗体的页脚中有一个隐藏控件(即控件和页脚的高度为0),在相应字段上有一个Sum(),然后从父窗体引用该控件。这将可靠地更新(尽管在父窗体中从一个记录移动到下一个记录时,您可能会看到它在屏幕上层叠)。当我只有一个子窗体、五个子表,有时两个子窗体合计时,这种方法很好,我将总计存储到数据库中。这完全取决于父表的子类型。我知道你在说什么,我会再考虑一下。谢谢你的建议。确认,子类型/超类型。我很久以前就得出结论说,这些都是有问题的,因为要看到所有这些的列表,要么需要联合,要么需要一大堆真正低效的左连接。也就是说,我倾向于尽可能避免子类型/超类型结构。