3

我有以下内容:“客户”表中的主表单“客户”。子表格“发票”,带有“发票日期”、“发票金额”、“客户 ID”等字段,来自“发票”表

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

即对于带有发票的客户 microsoft:1) 09 年 5 月 2 日,150 美元 2) 09 年 5 月 3 日,200 美元 3) 09 年 5 月 4 日,500 美元

如果用户点击记录 2),“total so far”应该显示 $350 如果用户点击记录 1),“total so far”应该显示 $150 如果用户点击记录 3),“total so far”应该显示 $850

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

还有其他更简单、更干净、更优雅、更快、更高效的使用 ms 访问功能的方法吗?

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

4

2 回答 2

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 查询,但这需要更多代码并再次访问数据库。

于 2009-05-22T15:43:44.550 回答
0

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

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

于 2009-08-05T12:37:31.850 回答