请教一下想在订单表头上面统计该客户的整月账单订单的收款状态,用了下面的代码,重置列的时候,需要的时间要好几分钟,帮忙看一下代码能不能改良一下,谢谢
说明:订单表中字段有:订单号,账单收款状态,订单金额,订单已收款,客户名,账单月份
收款表中字段有:订单号,订单金额,订单已收款,客户名,账单月份
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编辑过]
考虑实时更新,比如:
http://www.foxtable.com/webhelp/topics/1472.htm
而不是动不动就重置列。一般是更改代码后重置一下旧数据。如果说数据比较多,慢是正常的,这种没有什么可优化的了
因为我是辅助SQL数据库的,所以做不到实时更新呀。几千条数据,要差不多十分钟,这个和其他的求和速度差太多了,其他的几乎马上就好了
[此贴子已经被作者于2024/11/30 13:29:04编辑过]
意思是"收款表"是其它程序往数据库里写的,不是自己的程序录入的?
使用的是Compute,那么数据应该已经加载了,几千条数据也不应该要十分钟这么久,估计是"账单收款状态"更新后又触发了其它事件代码。方便做个例子发上来看看
不是,我两个表都是引用外部数据源的数据,然后通过重置列后再填入外部数据源的,收款表其实也是销售订单表,只不过我引用了两次同一个外部数据源的同一个表,起了不一的名字而已,估计这样而是等同一个表吧。之前试过,如果是同一个表内的数据参与重置,就会特别慢,如果是引用不同表的就很快,我以为添加同一个表进来,可以相当于不同表了,看看还是不行。