基于当前记录计算子表单的控制

时间:2009-05-22 14:14:06

标签: ms-access running-total

我有以下内容: 主要形式来自“客户”表的“客户”。 从表格“发票”中填写“发票日期”,“发票金额”,“客户ID”等字段的“发票”

每当用户点击或转到“发票”子表单中的记录时。 我想要一个“总到目前为止”的控制来计算“发票金额”的总和,直到当前记录被“点击”或被选中的日期为止。

即。对于客户微软发票: 1)5月2日,150美元 2)可能3月09日,200美元 3)5月4日,500美元

如果用户点击记录2),“到目前为止总计”应显示350美元 如果用户点击记录1),“总到目前为止”应该显示150美元 如果用户点击记录3),“总到目前为止”应显示$ 850

目前,我正在子窗体“发票”中的事件“OnCurrent”上使用DSum函数来设置“总到目前为止”的值。这种方法效率低,效率低吗?

使用ms访问功能的任何其他更简单,更简洁,更优雅,更快速,更有效的方法?

我希望“发票”子表单显示该客户的所有发票,无论点击哪条记录。

2 个答案:

答案 0 :(得分:1)

如果DSum方法适用于您,则使用它。

如果它太慢,那么另一种方法是使用记录集克隆并循环记录。 这是更多的代码,但它更有效,因为它不必命中数据库。你需要一把独特的钥匙。

Private Sub Form_Current()

  Dim rst As DAO.Recordset
  Dim subTotal As Currency
  Dim rec_id As Long

  'get clone of current records in subform'
  Set rst = Me.RecordsetClone

  'save current record id'
  rec_id = Me.rec_id

  rst.MoveFirst

  'loop and total until current is reached'
  Do Until rst![rec_id] = rec_id
    subTotal = subTotal + rst![InvoiceAmt]
    rst.MoveNext
  Loop

  'add last amount on current record' 
  subTotal = subTotal + rst![InvoiceAmt]

  Set rst = Nothing

  'set text box with subtotal'
  Me.Text2 = subTotal

End Sub

另一种方法是使用sum()构建一个sql查询,但需要更多代码并再次访问数据库。

答案 1 :(得分:0)

您可以在子窗体的页脚中放置一个带有Dsum的隐藏控件,然后从主窗体中引用该控件。 Dsum的第三个参数如"InvoiceId <= " & InvoiceId

在这种情况下不需要任何VBA /事件。