以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 执行代码时会闪退 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=183513) |
||||
-- 作者:edisontsui -- 发布时间:2022/11/8 9:00:00 -- 执行代码时会闪退
这些代码我是放在 afterbuild 里面的,当然 afterbuild 里面还有其他代码。但是,就是在执行这段代码时,会发生闪退现象(突然退出foxtable系统)。如果筛选出来的数据才几行,就不会闪退;如果筛选出来的数据有100多行,就会闪退。前段时间一直也没有这个现象,就是最近2天才会闪退。是不是数据行数多,需要运作的时间长了,就会闪退呢?或者还有其他原因?谢谢。
|
||||
-- 作者:有点蓝 -- 发布时间:2022/11/8 9:20:00 -- 闪退一般是代码执行出现了死循环,基本和数据多少没有关系。自行调试一下,看执行到什么代码后闪退 |
||||
-- 作者:edisontsui -- 发布时间:2022/11/8 14:58:00 -- \'MsgBox("3") \'测试通过 For Each r As Row In Tables("钣金开料单").rows If r("工位") = "910" Then If r("每票长度个数") = 1 Then \' r("票号3") = r("票号2") \'2022/11/8 取消 Dim r1 As Row = Tables("钣金开料单").rows(r.index - 1) If r("票号1") = r1("票号1") AndAlso r("长度分类") = r1("长度分类") AndAlso r("冲孔程序3") = r1("冲孔程序3") AndAlso r("每票长度个数") = r1("每票长度个数") Then r("票号3") = r1("票号3") Else r("票号3") = r("票号2") End If r("票号4") = r("票号2") Else r("票号3") = r("票号2") r("票号4") = r("票号2") End If End If Next \'MsgBox("4") 测试过好几次,提示3都可以出来,但提示4没出来就闪退了。于是我就把上面红色的一行代码取消了,目前暂时是没事了。那为什么这句话会有影响呢,还是上面那段的其他代码有影响?
|
||||
-- 作者:有点蓝 -- 发布时间:2022/11/8 15:01:00 -- Tables("钣金开料单")datacolchanged事件有没有什么代码? |
||||
-- 作者:edisontsui -- 发布时间:2022/11/8 17:23:00 --
请看附件里面的代码。谢谢。
|
||||
-- 作者:有点蓝 -- 发布时间:2022/11/8 17:28:00 -- 这种代码很容易死循环 If e.DataCol.name = "票号4" Then If e.DataRow("工位") = "910" Then If e.DataRow.isnull("票号3") = False Then \'这句不能少,否则无法增加新数据行 Dim Filter As String = "[票号3] = \'" & e.DataRow("票号3") & "\' and [_Identify] <>" & e.DataRow("_Identify") Dim drs As List(Of DataRow) = DataTables("钣金开料单").Select(Filter) Dim dr16 As String = e.DataRow("票号4") systemready=false For i As Integer = 0 To drs.Count - 1 drs(i)("票号4") = dr16 Next systemready=true End If End If End If If e.DataCol.name = "票号4" Then If e.DataRow("工位") = "920" Then If e.DataRow.isnull("冲孔程序2") = False Then \'这句不能少,否则无法增加新数据行 Dim Filter17 As String = "[冲孔程序2] = \'" & e.DataRow("冲孔程序2") & "\' and [工位] = \'" & e.DataRow("工位") & "\' and [_Identify] <>" & e.DataRow("_Identify") Dim drs17 As List(Of DataRow) = DataTables("钣金开料单").Select(Filter17) Dim dr17 As String = e.DataRow("票号4") systemready=false For i As Integer = 0 To drs17.Count - 1 drs17(i)("票号4") = dr17 Next systemready=true End If End If End If |
||||
-- 作者:edisontsui -- 发布时间:2022/11/9 7:33:00 -- 你的意思是加上 systemready=false 和 systemready=true 吗?那是不是在有类似这些代码的其他地方也这样子做就好一点?谢谢。 |
||||
-- 作者:有点蓝 -- 发布时间:2022/11/9 8:39:00 -- 看实际情况使用,滥用反而适得其反。 看上面代码,根据piao号4列触发事件,事件里又给piao号4赋值,赋值后肯定会又触发这个事件.......
|
||||
-- 作者:edisontsui -- 发布时间:2022/11/9 15:00:00 -- 明白了。谢谢。 |