以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 跨表统计更新问题 (http://foxtable.net/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 这样切换到统计表之后,会自动执行上述代码更新统计结果,虽然效率也不如前面的高,但这种差别用户是很难感受得到的,所以这种简单的处理方式足以满足绝大多数场合的需要。 |
|
-- 作者: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.NameCase "数量" 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 -- 回复楼主,这个问题这样解决,
[此贴子已经被作者于2020/5/29 14:51:07编辑过]
|