Foxtable(狐表)用户栏目专家坐堂 → 不能通过已删除的行访问该行的信息


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

主题:不能通过已删除的行访问该行的信息

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


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
不能通过已删除的行访问该行的信息  发帖心情 Post By:2018/8/3 17:02:00 [只看该作者]

我在“JPK612备料”的datacolchanged里面有如下代码:

If e.DataCol.name = "需求数量" 
    If e.DataRow("批号") = ""
    Else
        Dim re As Boolean = False
        For Each dr As DataRow In DataTables("批号表").DataRows
            If dr("物料编号") = e.DataRow("零件号") Then
                dr("库存数量") = dr("库存数量") - e.DataRow("需求数量") - e.OldValue
                dr("批号变动记录") = "出入库变动:" & Date.now & " " & User.Name
                dr("库存数量变动记录") = "出入库变动:" & Date.now & " " & User.Name
                re = True
                Exit For
            Else
                Continue For
            End If
        Next
        If re = False
            Dim dr As DataRow
            dr = DataTables("批号表").AddNew()
            dr("批号") = e.DataRow("批号")
            dr("物料编号") = e.DataRow("零件号")
            dr("库存数量") = 0 - e.DataRow("需求数量") 
            dr("批号变动记录") = "出入库变动:" & Date.now & " " & User.Name
            dr("库存数量变动记录") = "出入库变动:" & Date.now & " " & User.Name
        End If
    End If
end if

我在“批号表”的datacolchanged里面有如下代码:

If e.DataCol.name = "库存数量"
    If e.DataRow("库存数量") = 0
        e.DataRow.delete
    End If
End If


当我在“JPK612备料”输入一条记录,比如数量为1之后,此时“批号表”会增加一条记录,其数量也为1;如果我再在“JPK612备料”输入

一条记录,比如数量为-1之后,“批号表”里面此前增加的记录因为库存数量变为了0而删除,但是,却出现如下警告:


.NET Framework 版本:2.0.50727.8789
Foxtable 版本:2017.3.18.1
错误所在事件:表,JPK612备料,DataColChanged
详细错误信息:
调用的目标发生了异常。
不能通过已删除的行访问该行的信息。

这是为什么呢? 我们希望不要出现上述警告,该如何修改代码?谢谢。

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


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

不要在datacolchanged事件删除行。

 

你可以做一个按钮删除,或者关闭项目的时候删除。


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


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2018/8/4 8:54:00 [只看该作者]

关闭项目的时候删除,代码如何写?


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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/4 9:30:00 [只看该作者]

DataTables("批号表").DeleteFor("库存数量=0")

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


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2018/8/4 11:39:00 [只看该作者]

我将以上代码放入beforecloseproject里面去,待我关闭项目以及重开项目之后,发现“库存数量”=0的那行没有被删除。为什么呢?

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/4 12:00:00 [只看该作者]

DataTables("批号表").DeleteFor("库存数量=0")
DataTables("批号表").save

或者
DataTables("批号表").sqlDeleteFor("库存数量=0")


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


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2018/8/4 13:15:00 [只看该作者]

这个有效。谢谢。

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


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2018/8/13 18:20:00 [只看该作者]

批号表_DataColChanged

 

If e.DataCol.name = "库存数量"

    If e.DataRow("库存数量") = 0

        e.DataRow.delete

    End If

End If


“批号表”的datacolchanged里面有如上代码,我要改成:如果是“出入库”那个表导致的“库存数量" = 0,才允许执行删除命令。代码应该如何写?谢谢。


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


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

那就不要在datacolchanged事件写delete代码。

 

请在【出入库】导致库存数量变化的那个地方写删除的代码。


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


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2018/8/14 11:19:00 [只看该作者]

If e.DataCol.name = "入库数量" OrElse e.DataCol.name = "出库数量"

    If e.DataRow("批号") = ""

    Else

        Dim re As Boolean = False

        For Each dr As DataRow In DataTables("批号表").DataRows

            If dr("批号") = e.DataRow("批号") And dr("物料编号") = e.DataRow("物料编号") Then

                dr("库存数量") = e.DataRow("入库数量") + e.DataRow("出库数量") + dr("库存数量") - e.OldValue

                dr("批号变动记录") = "出入库变动:" & Date.now & " " & User.Name

                dr("库存数量变动记录") = "出入库变动:" & Date.now & " " & User.Name

                re = True

                Exit For

            Else

                Continue For

            End If

        Next

        If re =False

            Dim dr As DataRow

            dr = DataTables("批号表").AddNew()

            dr("批号") = e.DataRow("批号")

            dr("物料编号") = e.DataRow("物料编号")

            dr("物料名称") = e.DataRow("物料名称")

            dr("类别") = e.DataRow("类别")

            dr("来源") = e.DataRow("来源")

            dr("客户简称") = e.DataRow("客户")

            dr("库存数量") = e.DataRow("入库数量") + e.DataRow("出库数量")

            dr("批号变动记录") = "出入库变动:" & Date.now & " " & User.Name

            dr("库存数量变动记录") = "出入库变动:" & Date.now & " " & User.Name

        End If

    End If

End If


有道理。以上是“出入库”dtacolchanged里面的有关代码,如何加入代码达到如上目的? 谢谢。


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