首页 文章

从Access 2010中的子窗体获取小计的问题

提问于
浏览
0

我有一个表单(frmNewHours),上面有一些控件,我用它来改变子表单(tblHoursSubform),这是一个数据表视图子表单,包含2个可见的用户列(Project和MTDHours) . 我想在我的主窗体上的未绑定字段中显示MTDHours列的小计 .

What I tried first:

  • 我在主窗体中放置了一个未绑定的控件(小计)

  • 在子窗体的Form Footer中,我放置了一个未绑定的控件(HoursSubtotal),其中一个控件源= Sum([MTDHours])

  • 在主窗体的小计控件中,我将其控件源设置为= [tblHoursSubform]![HoursSubtotal]

这首先完美地工作,但是当我继续开发表单时(可能是不相关的细节,但我在主窗体上使用几个控件来更改子窗体的记录源和子窗体中的Project组合框控件的记录源)小计显示停止工作 . 我删除了小计控件并以完全相同的方式重新创建它们再次起作用,这对我来说没有意义,但我继续 .

我完成了对表单的开发并在另一台计算机上进行了测试,并且小计字段再次停止工作(子窗体的控件由于某种原因出错)

What I tried next:

  • 我编写了一个查询并返回小计的函数,并将控件源更改为= GetHoursSubtotal(GetUserID(),[SelectedSession])

这在加载表单时有效,但是当子表单中的数据发生更改时,小计不会更新,因此我将以下代码添加到子表单中:

Private Sub Form_Current()
    Me.Parent.Controls("Subtotal").Requery
End Sub

虽然这样可行,但刷新小计控件大约需要一秒钟,在此期间控件为空 . 因此,虽然它是功能性的,但它绝对不能按预期工作 .

所以现在我不知道接下来会尝试什么 . 有没有其他人经历过这个并找到了解决方案?

EDIT: 搞定了 . 我稍微回到原来的解决方案,但我将小计的控制源更改为= Nz(Sum([MTDHours]),0)现在没有更多的问题 .

1 回答

  • 0

    在第一次尝试中,当您更改子窗体的记录源时,在Sum控件的属性中丢失了一些东西 . 真的我无法理解为什么它不适用于另一台计算机 . 这没有道理!当您重新查询子表单时,您更新sum控件 . 您还应该重新查询主窗体以获取新值 .

    第二种解决方案肯定会更慢,因为您使用的是自定义功能而不是嵌入式功能 . 如果它是一个简单的总和,您可以尝试使用DSum函数,如果需要,使用主窗体的ID过滤记录集 . 您可以将DSum函数分配给主窗体的小计控件 . 再次查询子后你应该重新查询主要 .

    请注意,当前事件不应该是正确的事件,因为您要在每条记录中强制更新(如果表单不是连续表单,则无关紧要) . 在触发更新子窗体事件时更新小计会更好 .

    让我知道它是否有效 .

    再见

相关问题