以文本方式查看主题

-  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
--  执行代码时会闪退
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:闪退.rar

这些代码我是放在 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
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:临时代码2.rar

请看附件里面的代码。谢谢。

--  作者:有点蓝
--  发布时间: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
--  
明白了。谢谢。