以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于流水账式表的计算效率问题求助(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=50493)

--  作者:jiterp
--  发布时间: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
--  发布时间:2014/5/7 16:30:00
--  
这么多数据,你就采用分页加载吧..  不死机就算你好的了.
--  作者:Bin
--  发布时间:2014/5/7 16:30:00
--  
分页加载流水账看这里http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=48879
--  作者:逛逛
--  发布时间:2014/5/7 16:56:00
--  

不会是死循环了吧

 

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

 

 


--  作者:有点甜
--  发布时间:2014/5/7 17:00:00
--  

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

 

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


--  作者:don
--  发布时间:2014/5/7 17:01:00
--  
應該是4QQ了
--  作者:jiterp
--  发布时间: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
--  发布时间: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万多行,到最后最多可能留下几千行数据的记录行。


--  作者:有点甜
--  发布时间: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
--  发布时间:2014/5/7 20:32:00
--  

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

 

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