以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  跨表统计更新问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=142253)

--  作者:swagger
--  发布时间:2019/10/22 10:08:00
--  跨表统计更新问题
统计列名称不一样,不能即时更新,该怎么写?

统计表:
If e.DataCol.Name = "产品" Then 
    e.DataRow("销售总量") = DataTables("订单").Compute("Sum(数量)","[产品] = \'" & e.NewValue & "\'")
End
 
If


订单表:

If e.DataCol.Name = "数量" Then
    Dim pr As DataRow
    pr = 
DataTables("统计").Find("产品 = \'" & e.DataRow("产品") & "\'")
    If
 pr IsNot Nothing 
Then
        pr(
"销售总量")= pr("数量") + e.NewValue - e.OldValue
    End
 
If
End
 If


上述不能即时更新。请问该怎么写?

--  作者:狐狸爸爸
--  发布时间:2019/10/22 10:18:00
--  
一般没有必要这样更新,应该:

提醒:

一般来说,统计表是没有必要即时更新的,完全可以像上一节那样简单地在项目事件MainTableChanged中加入下面的代码:

If MainTable.Name = "统计" Then
    DataTables(
"统计表").DataCols("产品").RaiseDataColChanged()

End
 If

这样切换到统计表之后,会自动执行上述代码更新统计结果,虽然效率也不如前面的高,但这种差别用户是很难感受得到的,所以这种简单的处理方式足以满足绝大多数场合的需要。



--  作者:swagger
--  发布时间:2019/10/22 11:07:00
--  

统计表:
If e.DataCol.Name = "产品" Then 
    e.DataRow("销售总量") = DataTables("订单").SQLCompute("Sum(数量)","[产品] = \'" & e.NewValue & "\'")
End
 
If

订单表:
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




如果统计表用compute,可以即时更新。但是用了SQLcompute就不能即时更新,是不是SQLCompute无法即时更新?

--  作者:有点蓝
--  发布时间:2019/10/22 11:19:00
--  
SQLcompute只能统计已经保存的数据。如果界面有数据没有保存是统计不到的
--  作者:swagger
--  发布时间:2020/5/29 14:51:00
--  
回复楼主,这个问题这样解决,


统计表:
If e.DataCol.Name = "产品" Then 
    e.DataRow("数量") = DataTables("订单").Compute("Sum(数量)","[产品] = \'" & e.NewValue & "\'")
   e.DataRow("销售总量")  = e.DataRow("数量"
End
 
If


订单表:

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
[此贴子已经被作者于2020/5/29 14:51:07编辑过]