以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于统计子表数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184438)

--  作者:zhuxinhui
--  发布时间:2022/12/7 14:40:00
--  关于统计子表数据

1、Sum(Child(LF).结算金额),使用这个表达式求子表数据,只能统计已加载的数据,如果不加载子表明细统计结果就不准了

2、使用Tables("应付").Current("应付金额") = Round2(DataTables("已审采购").SQLCompute("Sum(结算金额)", "立帐编码 =\'" & s & "\'"), 2)方式求和,感觉又有点慢

有没有更好的统计子表明细数据的方式


--  作者:有点蓝
--  发布时间:2022/12/7 15:03:00
--  
如果数据没有完全加载的,只能是第2种方法,没有其它办法。
--  作者:zhuxinhui
--  发布时间:2022/12/7 15:27:00
--  

如果在表的CurrentChanged事件加上这些代码

 

If e.Table.Current IsNot Nothing Then
Dim ym As String = e.Table.Current("立帐编码")
    Dim Filter As String = "MB005=\'" & ym & "\'"
    If DataTables("已审销售").Find(Filter) Is Nothing Then \'如果对应的订单明细没有加载过
        DataTables("已审销售").AppendLoad(Filter) \'则追载此订单的订单明细
    End If
End If

在统计子表数据时应该不用使用SQLCOMPUTE,直接使用COMPUTE会快些

Tables("应付").Current("应付金额") = Round2(DataTables("已审采购").Compute("Sum(结算金额)", "立帐编码 =\'" & s & "\'"), 2)

 

或者在单据上统计子表数据也可以使用Compute,而不使使用SQLCOMPUTE吧

 


--  作者:有点蓝
--  发布时间:2022/12/7 15:33:00
--  
如果不是重置列,一边录入一边计算,使用sqlcompute也没有多大问题的。

另外上面的代码一样有缺陷,比如同编号明细加载了一部分,没加载完,Find肯定是有结果的。最好的方法是把同编号的数据全部移除掉,再追加

--  作者:zhuxinhui
--  发布时间:2022/12/7 15:53:00
--  

这个需要怎样写移除呢,

我现在只是想在填 制单据时能够快、准、完整计算出子表数据

这几日在搞着数据速度的问题


--  作者:有点蓝
--  发布时间:2022/12/7 16:05:00
--  
http://www.foxtable.com/webhelp/topics/2914.htm
--  作者:zhuxinhui
--  发布时间:2022/12/7 16:13:00
--  

使用DataTable的Load方法加载数据也是加载不全的??

例如:根据单号加载数据也是加载不全,有办法可以加载得完全

Dim dt = e.Form.Controls("TextBox2").value
DataTables("已审销售").LoadFilter = "MB005 = \'" & dt & "\'"
DataTables("已审销售").Load()


--  作者:有点蓝
--  发布时间:2022/12/7 16:17:00
--  
DataTables("已审销售").LoadFilter = "MB005 = \'" & dt & "\'"
DataTables("已审销售").Loadtop = nothing
DataTables("已审销售").Load()