以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]流水账代码有时不计算  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=80648)

--  作者:文道古月
--  发布时间:2016/1/28 9:06:00
--  [求助]流水账代码有时不计算

这段代码,用来计算流水账的,现在有点问题:有些时候,有些行不计算,也没有规律,必须手动重置列,尤其是网络环境时

 

请帮忙看看什么问题

 

Dim dr As DataRow \'定义一个其它行(没发生变化的行;这里用来表示被查找的上一行)
        Dim mr As DataRow = e.DataRow \'定义一个发生变化的行
        dr = e.DataTable.Find("[_Identify] < " & mr("_Identify") & " and [物料编码] = \'" & mr("物料编码") & "\' And [移动单元] = \'" & mr("移动单元") & "\'","[_Identify] desc")
        If dr Is Nothing Then \'主动单元行向上没找到,那本行就是第一行
            mr("结存") = mr("移动数量") \'\'当前变化的行的值=当前变化行的值
        Else \'主动单元向上找到了
            mr("结存") = dr("结存") + mr("移动数量") \'当前变化行的值=找到的行的结存值+当前变化行的数量值
        End If
       


--  作者:大红袍
--  发布时间:2016/1/28 9:28:00
--  

网络环境的话,这段代码是有问题的,因为各个人算的都是自己加载的数据,别人新加的数据并没有计算在内的。

 

方法一:你重置列 http://www.foxtable.com/help/topics/2237.htm

 

方法二:用sqlFind查询行

 

Dim dr As DataRow \'定义一个其它行(没发生变化的行;这里用来表示被查找的上一行)
Dim mr As DataRow = e.DataRow \'定义一个发生变化的行

dr = e.DataTable.sqlFind("[_Identify] < " & mr("_Identify") & " and [物料编码] = \'" & mr("物料编码") & "\' And [移动单元] = \'" & mr("移动单元") & "\'","[_Identify] desc")
If dr Is Nothing Then \'主动单元行向上没找到,那本行就是第一行
    mr("结存") = mr("移动数量") \'\'当前变化的行的值=当前变化行的值
Else \'主动单元向上找到了
    mr("结存") = dr("结存") + mr("移动数量") \'当前变化行的值=找到的行的结存值+当前变化行的数量值
End If

 

同时,你要在DataRowAdded事件写代码 e.DataRow.Save