以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 无法创建新的堆栈防护页面 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=186511) |
||||
-- 作者:edisontsui -- 发布时间:2023/5/8 11:56:00 -- 无法创建新的堆栈防护页面 出入库 datacolchanged 代码: If e.DataCol.name = "余数" Then e.DataRow.save \'必须先保存,后面SQL才能统计到此数据的变化 Dim max As Integer = DataTables("出入库").Compute("Max(_Identify)", "物料编号 = \'" & e.DataRow("物料编号") & "\'") \'取得同物料的最大识别号 If e.DataRow("_Identify") = max Then If user.Group = "仓库" OrElse user.Group = "组装仓库" OrElse user.Group = "仓库(铝巴)" OrElse user.Group = "品质" OrElse user.Group = "品质工程师" OrElse user.name = "开发者"Then DataTables("物料字典").DataCols("物料编号").RaiseDataColChanged("物料编号 = \'" & e.DataRow("物料编号") & "\'") End If End If End If 物料字典 datacolchanged 代码: If e.DataCol.Name = "物料编号" Then If e.NewValue IsNot Nothing Then Dim dr1 As DataRow = DataTables("出入库").SQLFind("物料编号 = \'" & e.DataRow("物料编号") & "\'", "_Sortkey Desc") If dr1 IsNot Nothing Then e.DataRow("最后余数1") = dr1("余数") End If Dim dr As DataRow = DataTables("出入库2").SQLFind("物料编号 = \'" & e.DataRow("物料编号") & "\'", "_Sortkey Desc") If dr IsNot Nothing Then e.DataRow("最后余数2") = dr("余数") End If end if end if 上面 出入库 代码执行时,会触发 物料字典 发生|“无法创建新的堆栈防护页面” 提示。请问要怎样修改代码好呢?谢谢。 |
||||
-- 作者:有点蓝 -- 发布时间:2023/5/8 12:11:00 -- 事件执行死循环了。2个表的datacolchanged 事件代码全部发上来看看 |
||||
-- 作者:edisontsui -- 发布时间:2023/5/8 12:48:00 --
请看附页代码。
|
||||
-- 作者:有点蓝 -- 发布时间:2023/5/8 13:42:00 -- 嗷,这么多代码,我就没法看了。自己调试吧,就是找:列A触发更改列B,列B触发后又更改列C,列C触发又更改列A,...如此不断循环的调用。这个循环可能是跨表的触发。 考虑把代码全部注释掉,然后一段段启用,看是哪些代码会有影响。
|
||||
-- 作者:edisontsui -- 发布时间:2023/5/8 15:30:00 -- 我确定是1楼的两段代码死循环了,就是不知道从哪里改起。 |
||||
-- 作者:有点蓝 -- 发布时间:2023/5/8 15:38:00 -- 肯定不止1楼的的代码,只能说是1楼的代码又导致了其它代码的触发。 这个东西只能自己一个一个去追溯了,比如上面1楼代码更改了"最后余数1"的数据,然后在去看看什么地方会有下面这种根据"最后余数1"触发其它处理的代码,其它处理又触发了其它的列...... If e.DataCol.Name = "最后余数1" Then 或者 case "最后余数1"
|