我有以下内容: 主要形式来自“客户”表的“客户”。 从表格“发票”中填写“发票日期”,“发票金额”,“客户ID”等字段的“发票”
每当用户点击或转到“发票”子表单中的记录时。 我想要一个“总到目前为止”的控制来计算“发票金额”的总和,直到当前记录被“点击”或被选中的日期为止。
即。对于客户微软发票: 1)5月2日,150美元 2)可能3月09日,200美元 3)5月4日,500美元
如果用户点击记录2),“到目前为止总计”应显示350美元 如果用户点击记录1),“总到目前为止”应该显示150美元 如果用户点击记录3),“总到目前为止”应显示$ 850
目前,我正在子窗体“发票”中的事件“OnCurrent”上使用DSum函数来设置“总到目前为止”的值。这种方法效率低,效率低吗?
使用ms访问功能的任何其他更简单,更简洁,更优雅,更快速,更有效的方法?
我希望“发票”子表单显示该客户的所有发票,无论点击哪条记录。
答案 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 /事件。