以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  在订单表头上面统计整月订单的收款状态  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=194339)

--  作者:ganlan
--  发布时间:2024/11/30 12:28:00
--  在订单表头上面统计整月订单的收款状态
请教一下想在订单表头上面统计该客户的整月账单订单的收款状态,用了下面的代码,重置列的时候,需要的时间要好几分钟,帮忙看一下代码能不能改良一下,谢谢
说明:订单表中字段有:订单号,账单收款状态,订单金额,订单已收款,客户名,账单月份
         收款表中字段有:订单号,订单金额,订单已收款,客户名,账单月份

Select Case e.DataCol.name
    Case "订单号"
        If e.DataRow.IsNull("订单号") Then
            e.DataRow("账单收款状态") = Nothing
        Else
            Dim filter As String 
            filter = "[客户名] = \'" & e.DataRow("客户名") & "\' and  账单月份 = \'" & e.DataRow("账单月份") & "\'"
            Dim ddje As Integer = DataTables("收款表").Compute("sum(订单金额)", filter)
            Dim ddys As Integer = DataTables("收款表").Compute("sum(订单已收款)", filter)
            If ddje = ddys Then
                e.DataTable.replacefor("账单收款状态", "收完", filter)
            Else
                e.DataTable.replacefor("账单收款状态", "未收完", filter)
            End If 
        End If
End Select
[此贴子已经被作者于2024/11/30 12:30:09编辑过]

--  作者:有点蓝
--  发布时间:2024/11/30 12:51:00
--  
考虑实时更新,比如:http://www.foxtable.com/webhelp/topics/1472.htm

而不是动不动就重置列。一般是更改代码后重置一下旧数据。如果说数据比较多,慢是正常的,这种没有什么可优化的了

--  作者:ganlan
--  发布时间:2024/11/30 13:28:00
--  
因为我是辅助SQL数据库的,所以做不到实时更新呀。几千条数据,要差不多十分钟,这个和其他的求和速度差太多了,其他的几乎马上就好了
[此贴子已经被作者于2024/11/30 13:29:04编辑过]

--  作者:有点蓝
--  发布时间:2024/11/30 13:49:00
--  
意思是"收款表"是其它程序往数据库里写的,不是自己的程序录入的?

使用的是Compute,那么数据应该已经加载了,几千条数据也不应该要十分钟这么久,估计是"账单收款状态"更新后又触发了其它事件代码。方便做个例子发上来看看

--  作者:ganlan
--  发布时间:2024/11/30 14:18:00
--  
不是,我两个表都是引用外部数据源的数据,然后通过重置列后再填入外部数据源的,收款表其实也是销售订单表,只不过我引用了两次同一个外部数据源的同一个表,起了不一的名字而已,估计这样而是等同一个表吧。之前试过,如果是同一个表内的数据参与重置,就会特别慢,如果是引用不同表的就很快,我以为添加同一个表进来,可以相当于不同表了,看看还是不行。
--  作者:有点蓝
--  发布时间:2024/11/30 16:13:00
--  
上实例吧