以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  无法创建新的堆栈防护页面  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=162121)

--  作者:ycs5801
--  发布时间:2021/4/6 15:57:00
--  无法创建新的堆栈防护页面
单元格内输入数字后即跳出提示,软件自动关闭。
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20210202161719.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2021/4/6 16:05:00
--  
表格事件代码计算,或者单元格表达式计算出现了死循环
--  作者:ycs5801
--  发布时间:2021/4/6 16:37:00
--  

[此贴子已经被作者于2021/4/6 21:39:32编辑过]

--  作者:有点蓝
--  发布时间:2021/4/6 16:46:00
--  
这个控制太多了,自己检查吧,比如下面dctpc触发更改"dclcf","dclcf"的更改又触发"dcharbourdensity"的更改,一层一层,最后其它地方又导致dctpc触发,现成一个闭环,就是死循环了

Select Case e.DataCol.Name
    Case "dctpc","clcf"  \'\'dclcf获取公式
        If e.DataRow.IsNull("dctpc") And  e.DataRow.IsNull("clcf") Then
            e.DataRow("dclcf") = Nothing
        Else
            e.DataRow("dclcf") = e.DataRow("dctpc")+e.DataRow("clcf")
        End If
End Select

Select Case e.DataCol.Name
    Case "dclcf","harbourdensity","tabledensity"  \'\'dcharbourdensity获取公式
        If e.DataRow.IsNull("dclcf") And  e.DataRow.IsNull("harbourdensity") And  e.DataRow.IsNull("tabledensity")  Then
            e.DataRow("dcharbourdensity") = Nothing
        Else
            e.DataRow("dcharbourdensity") = e.DataRow("dclcf")*e.DataRow("harbourdensity")/e.DataRow("tabledensity")
        End If
End Select

--  作者:ycs5801
--  发布时间:2021/4/6 18:38:00
--  
但是实际当中确实是这个触发需求,请问怎么避免,或者采取什么方式完成?
--  作者:有点蓝
--  发布时间:2021/4/6 20:32:00
--  
不要闭环,比如A触发B,B触发C,C又触发A,没完没了,肯定要有一个终结点。

找到合适的点,使用systemready:http://www.foxtable.com/webhelp/topics/2218.htm

--  作者:ycs5801
--  发布时间:2021/4/6 20:49:00
--  
但是无论你暂停了哪个点,会不会影响后续因值改变而引发的事件无法触发呢?
--  作者:有点蓝
--  发布时间:2021/4/6 20:59:00
--  
肯定有一个无法触发。这个要您自己考虑了,重新理清一下业务逻辑,出现这种闭环的触发逻辑肯定是有问题的
--  作者:ycs5801
--  发布时间:2021/4/6 21:27:00
--  
好的老师。