以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  跨表统计如何满足两列条件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=139714)

--  作者:Jaime
--  发布时间:2019/8/20 5:54:00
--  跨表统计如何满足两列条件

老师好!以下代码是http://www.foxtable.com/webhelp/topics/1472.htm 跨表统计的自动更新示例。  是在统计表内自动更新订单表的数量和金额

但代码只是根据“产品”一列统计,如果要同时满足统计“产品”和“型号”两列(如以下示例统计表格),请问如何改代码? 我是小白,试着改了很多次没成功,请老师帮帮我,谢谢!

  产品   型号    数量  金额  
   A   m1      
   A   m2      
   B   m1      
   C   m2      


统计表的DataColChanged事件代码设置为:

If e.DataCol.Name = "产品" Then 
    Dim
 Filter As String = "[产品] = \'" & e.NewValue & "\'"
    e.
DataRow("数量") = DataTables("订单").Compute("Sum(数量)", Filter)
    e.
DataRow("金额") = DataTables("订单").Compute("Sum(金额)", Filter) 
End
 If


订单表的DataColChanged事件代码设置为:

Select Case e.DataCol.Name
    Case
 "数量","单价","折扣"
        
Dim pr As DataRow
        pr = 
DataTables("统计").Find("产品 = \'" & e.DataRow("产品") & "\'")
        If
 pr IsNot Nothing Then
            DataTables
("统计").DataCols("产品").RaiseDataColChanged(pr)
        End
 If
End
 Select


--  作者:y2287958
--  发布时间:2019/8/20 7:51:00
--  
Select Case e.DataCol.Name
    Case
 "产品","型号"
        
Dim Filter As String = "[产品] = \'" & e.NewValue & "\' and [型号] = \'" & e.DataRow("型号") & "\'"
        e.
DataRow("数量") = DataTables("订单").Compute("Sum(数量)", Filter)
        e.
DataRow("金额") = DataTables("订单").Compute("Sum(金额)", Filter)
End
 Select
[此贴子已经被作者于2019/8/20 7:52:34编辑过]

--  作者:有点蓝
--  发布时间:2019/8/20 9:06:00
--  
Select Case e.DataCol.Name
    Case
 "产品","型号"
        
Dim Filter As String = "[产品] = \'" & e.DataRow("产品") & "\' and [型号] = \'" & e.DataRow("型号") & "\'"
        e.
DataRow("数量") = DataTables("订单").Compute("Sum(数量)", Filter)
        e.
DataRow("金额") = DataTables("订单").Compute("Sum(金额)", Filter)
End
 Select

--  作者:Jaime
--  发布时间:2019/8/20 9:14:00
--  
谢谢蓝老师! 根据第一段修改的代码测试了,可以计算统计但需要手动重置列才更新数据

原示例第二段代码是自动重置让自动更新数据的,请问这个怎么按照“产品”“型号”两列条件改?

订单表的DataColChanged事件代码设置为:

Select Case e.DataCol.Name
    Case
 "数量","单价","折扣"
        
Dim pr As DataRow
        pr = 
DataTables("统计").Find("产品 = \'" & e.DataRow("产品") & "\'")
        If
 pr IsNot Nothing Then
            DataTables
("统计").DataCols("产品").RaiseDataColChanged(pr)
        End
 If
End
 Select


--  作者:有点蓝
--  发布时间:2019/8/20 9:31:00
--  
旧数据肯定都要重置一次列。

第二段代码不需要做任何更改