Foxtable(狐表)用户栏目专家坐堂 → 关于流水账式表的计算效率问题求助(已解决)


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

主题:关于流水账式表的计算效率问题求助(已解决)

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


加好友 发短信
等级:三尾狐 帖子:715 积分:8574 威望:0 精华:0 注册:2011/11/13 15:49:00
关于流水账式表的计算效率问题求助(已解决)  发帖心情 Post By:2014/5/7 16:29:00 [只看该作者]

我有一个表,有62359行数据,现在执行以下代码,半个小时过去了,还没完成,有没有更好的方法?

 

Select Case e.DataCol.Name
    Case "入库量","分摊数量","结存量","余量","标识"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [标识] = '" & mr("标识") & "'  ")
        If dr Is Nothing Then '如果没有上一行,说明本行就是同产品的第一行
            mr("余量") = mr("结存量") - mr("入库量")
            If mr("余量") >= 0 Then
                mr("分摊数量") =  mr("入库量")
            Else
                mr("分摊数量") = mr("结存量")
            End If
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [标识] = '" & mr("标识") & "' ")
        For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
            drs(i)("余量") = drs(i-1)("余量") - drs(i)("入库量")
            If drs(i)("余量") > = 0 Then
                drs(i)("分摊数量") = drs(i)("入库量")
            Else
                drs(i)("分摊数量") = drs(i-1)("余量")
            End If
        Next
End Select

[此贴子已经被作者于2014-5-18 22:22:30编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/7 16:30:00 [只看该作者]

这么多数据,你就采用分页加载吧..  不死机就算你好的了.

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/7 16:30:00 [只看该作者]


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


加好友 发短信
等级:版主 帖子:1693 积分:12117 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2014/5/7 16:56:00 [只看该作者]

不会是死循环了吧

 

看你判断列名,不会是在列值改变的事件里吧

 

 


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


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

 这句,余量和分摊数量不应该写,改一下。

 

Select Case e.DataCol.Name
    Case "入库量","结存量","标识"


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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2014/5/7 17:01:00 [只看该作者]

應該是4QQ了

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


加好友 发短信
等级:三尾狐 帖子:715 积分:8574 威望:0 精华:0 注册:2011/11/13 15:49:00
  发帖心情 Post By:2014/5/7 18:24:00 [只看该作者]

以下是引用有点甜在2014-5-7 17:00:00的发言:

 这句,余量和分摊数量不应该写,改一下。

 

Select Case e.DataCol.Name
    Case "入库量","结存量","标识"

这里改了计算没结果,我要计算分摊数量与余量结果。

[此贴子已经被作者于2014-5-7 18:24:48编辑过]

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


加好友 发短信
等级:三尾狐 帖子:715 积分:8574 威望:0 精华:0 注册:2011/11/13 15:49:00
  发帖心情 Post By:2014/5/7 18:49:00 [只看该作者]

以下是引用Bin在2014-5-7 16:30:00的发言:
分页加载流水账看这里http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=48879

我不能采用分页模式,因为这个表是用来计算库龄的,计算出结果后,会按照计算结果删除分摊数量<=0的数据,也就是说6万多行,到最后最多可能留下几千行数据的记录行。


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


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

以下是引用jiterp在2014-5-7 18:49:00的发言:

我不能采用分页模式,因为这个表是用来计算库龄的,计算出结果后,会按照计算结果删除分摊数量<=0的数据,也就是说6万多行,到最后最多可能留下几千行数据的记录行。

 

六万多行,运算一次也不用半小时那么恐怖的。

 

你做个例子发上来测试一下。看5楼。然后看看下面帮助,加上停止执行的代码

 

http://www.foxtable.com/help/topics/2218.htm

 


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


加好友 发短信
等级:三尾狐 帖子:715 积分:8574 威望:0 精华:0 注册:2011/11/13 15:49:00
  发帖心情 Post By:2014/5/7 20:32:00 [只看该作者]

下面是数据测试例子,执行计算后,到最后自己退出了程序。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数据测试.rar

 


 回到顶部
总数 12 1 2 下一页