Foxtable(狐表)用户栏目专家坐堂 → 分页流水账的统计


  共有2498人关注过本帖树形打印复制链接

主题:分页流水账的统计

帅哥哟,离线,有人找我吗?
elfing
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:90 积分:1202 威望:0 精华:0 注册:2015/4/25 9:42:00
分页流水账的统计  发帖心情 Post By:2018/3/15 22:30:00 [只看该作者]

设计了一个分页加载的流水账,但是需要对库存进行统计,如果使用如下代码,每次重置所有产品的库存需要大量的时间,而且数据量越大越慢,想请教有没有效率更高的代码可以用来统计每个产品的实时库存?
以下内容为程序代码:

1 Dim dt1 As Integer = DataTables("半成品流水").sqlCompute("Sum(入库)","半成品件号 = '" & e.DataRow("半成品件号") & "'")
2 Dim dt2 As Integer = DataTables("半成品流水").sqlCompute("Sum(出库)","半成品件号 = '" & e.DataRow("半成品件号") & "'")
3 e.DataRow("库存") = dt1 - dt2


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/15 22:44:00 [只看该作者]

不要用重置列,单独写一个代码计算,如

 

Dim dt As Datatable = DataTables("半成品流水")
Dim dic As new Dictionary(of String, Double)
For Each dr As DataRow In dt.Select("")
    Dim key = dr("半成品件号")
    If dic.ContainsKey(key) = False Then
        Dim dt1 As Integer = dt.sqlCompute("Sum(入库)","半成品件号 = '" & key & "'")
        Dim dt2 As Integer = dt.sqlCompute("Sum(出库)","半成品件号 = '" & key & "'")
        dr("库存") = dt1 - dt2
        dic.Add(key,  dt1 - dt2)
    Else
        dr("库存") = dic(key)
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
elfing
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:90 积分:1202 威望:0 精华:0 注册:2015/4/25 9:42:00
时间  发帖心情 Post By:2018/3/15 23:23:00 [只看该作者]

多谢
试验了一下,以重置的方式计算大概30秒,以代码计算方式大概28秒,这已经是最快的方式了吗?分页流水账只使用了一个月不到,如果后面数据更多是不是每次加载都会特别慢?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/15 23:37:00 [只看该作者]

关键是执行了多少次 sqlCompute 函数,每一次执行都是很耗时的。

 

或者试试改成下面这样,如果还是耗时,做具体实例发上来测试优化

 

systemready = false
Dim dt As Datatable = DataTables("半成品流水")
Dim dic As new Dictionary(of String, Double)
For Each dr As DataRow In dt.Select("")
    Dim key = dr("半成品件号")
    If dic.ContainsKey(key) = False Then
        Dim dt1 As Integer = dt.sqlCompute("Sum(入库)","半成品件号 = '" & key & "'")
        Dim dt2 As Integer = dt.sqlCompute("Sum(出库)","半成品件号 = '" & key & "'")
        dr("库存") = dt1 - dt2
        dic.Add(key,  dt1 - dt2)
    Else
        dr("库存") = dic(key)
    End If
Next
systemready = true


 回到顶部