【问题标题】:Calculated control on subform based on current record根据当前记录计算对子表单的控制
【发布时间】:2010-10-28 05:43:41
【问题描述】:

我有以下几点: “客户”表中的主表单“客户”。 子表单“发票”,其中包含“发票”表中的“发票日期”、“发票金额”、“客户 ID”等字段

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

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

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

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

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

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

【问题讨论】:

    标签: ms-access cumulative-sum


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果 DSum() 很慢,那么循环遍历所有记录肯定会变慢吗?
      • 否 - 记录克隆是内存中的副本。 DSUM 对数据库进行查询。
      • 它是子表单中已经过滤和检索的记录的副本,因此不会有很多记录
      • 好的,谢谢。我会试试的。根据我所看到的,它应该快得多。谢谢。
      猜你喜欢
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 2020-07-21
      相关资源
      最近更新 更多