以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  跨表统计后台数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=161363)

--  作者:15666282205
--  发布时间:2021/3/15 10:36:00
--  跨表统计后台数据
老师,我编写了跨表统计代码,问题:如果显示统计数据的表已经加载了某些行,则已加载的行统计正常,但是没加载的行就不执行统计,我想实现全部后台没加载的行也能统计。我是把被统计的表的数据用代码重置一下触发统计的,请您指导。
以下代码在被统计表的“datacolchangend”事件中
\'-----------------------------自动统计数据------------------------
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

--  作者:有点蓝
--  发布时间:2021/3/15 10:41:00
--  
"合同信息"表的数据肯定要加载才能统计。"合同信息"要统计的其它表数据如果没有加载,可以改后台统计:http://www.foxtable.com/webhelp/topics/2897.htm
--  作者:15666282205
--  发布时间:2021/3/15 11:15:00
--  
老师,我想实现后台跨表统计,如被统计的表数据有变动,但是显示统计数据的“合同信息”表没加载,如何在后台就相应的改动统计结果?
--  作者:有点蓝
--  发布时间:2021/3/15 11:24:00
--  
那要自己使用sql统计处理:http://www.foxtable.com/webhelp/topics/0696.htm
--  作者:15666282205
--  发布时间:2021/3/15 12:12:00
--  
老师,看了,太难,没大用SQL,麻烦您在我的代码基础上修改一下行吗?被统计的表是“现金日记账”的“收款“列,谢谢!
[此贴子已经被作者于2021/3/15 12:12:47编辑过]

--  作者:有点蓝
--  发布时间:2021/3/15 13:34:00
--  
"合同信息"表datacolchaged事件代码发上来
--  作者:15666282205
--  发布时间:2021/3/15 14:41:00
--  
以下代码在“现金日记账”表的“datacolchangend”事件中,如果“价税合计”,改变,把合计数在“合同信息”表里相应改变。"合同信息"表datacolchaged事件没有代码
\'-----------------------------自动统计数据------------------------
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

--  作者:有点蓝
--  发布时间:2021/3/15 14:44:00
--  
"合同信息"表datacolchaged事件没有代码,那么上面的代码就没有任何用处。RaiseDataColChanged就是用来触发"合同信息"表datacolchaged事件的
--  作者:15666282205
--  发布时间:2021/3/15 14:54:00
--  
老师,有代码,还取了两个表的数。问题是被取数的表如果不加载,就没法取数,设置成后台取数就可以了。
\'-----------------------自动统计-------------------------
If e.DataCol.Name = "序号" Then
    Dim Filter As String = "[合同序号] = \'" & e.NewValue & "\'"
    e.DataRow("收入") = DataTables("现金日记账").Compute("Sum(收入)", Filter)
    e.DataRow("预计成本利润_拨款") = DataTables("现金日记账").Compute("Sum(支出)", Filter)
    e.DataRow("已执行金额") = DataTables("莱矿总包合同").Compute("Sum(价税合计)", Filter)
End If

--  作者:有点蓝
--  发布时间:2021/3/15 15:02:00
--  
参考:http://www.foxtable.com/webhelp/topics/2897.htm

DataTables("现金日记账").SQLCompute("Sum(收入)", Filter)