以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]执行内部函数死循环  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=171823)

--  作者:zxlid
--  发布时间:2021/9/10 17:37:00
--  [求助]执行内部函数死循环
请问老师,以下代码(通过基本信息的姓名与线索、案件数据的被调查人比对,如发现数据库中有同名的,则把有关信息添加至查询结果库中)在命令窗口执行正常,但做成一内部函数bbdata(在首尾分别加上Dim e As RequestEventArgs = Args(0))、e.Handled = True),用代码:图片点击可在新窗口打开查看去调用,出现死循环,该怎么解决?谢谢!

DataTables("协审查询结果").DataRows.Clear()
Dim dt1 As DataTable = DataTables("基本信息")
Dim dt2 As DataTable = DataTables("线索数据")
Dim dt3 As DataTable = DataTables("案件数据")
Dim dt4 As DataTable = DataTables("协审查询结果")

Dim i As Integer = 0
For Each dr1 As DataRow In dt1.DataRows
    Dim xm As String = dr1("姓名").trim()
    Dim drs2 As List(Of DataRow)
    drs2 = dt2.Select("被调查人 = \'" & xm & "\'")
    For Each dr2 As DataRow In drs2
        Dim dr4 As DataRow = dt4.AddNew()
        dr4("姓名") = dr2("被调查人")
        dr4("身份证号码") = ""
        dr4("现单位") = dr1("单位")
        dr4("处理类型") = dr2("组织措施")
        dr4("处理事由") = dr2("简要案情")
        dr4("处理时间") = dr2("处理时间")
        
        dr4("时任单位职务") = dr2("工作单位及职务")
        dr4("备注") = ""
        Dim cllx As String = dr2("组织措施")
        If cllx.Contains("诫勉") Then
            If Not dr2.IsNull("处理时间") Then
                dr4("影响时限") = dr2("处理时间").AddMonths(6)
            End If
        Else
            If Not dr2.IsNull("处理时间") Then
                dr4("影响时限") = dr2("处理时间")
            End If
        End If
    Next
    
    Dim drs3 As List(Of DataRow)
    drs3 = dt3.Select("被调查人 = \'" & xm & "\'")
    For Each dr3 As DataRow In drs3
        Dim dr4 As DataRow = dt4.AddNew()
        dr4("姓名") = dr3("被调查人")
        dr4("身份证号码") = ""
        dr4("现单位") = dr1("单位")
        dr4("处理类型") = dr3("党纪处分") + "*" + dr3("政纪处分")
        dr4("处理事由") = dr3("简要案情")
        dr4("处理时间") = dr3("结案时间")
        dr4("影响时限") = ""
        dr4("时任单位职务") = dr3("工作单位及职务")
        dr4("备注") = ""
        Dim djcf As String = dr3("党纪处分")
        If djcf.Contains("开除党籍") Then
            If Not dr3.IsNull("结案时间") Then
                dr4("影响时限") = dr3("结案时间").AddMonths(480)
            End If
        ElseIf djcf.Contains("留党察看") Then
            If Not dr3.IsNull("结案时间") Then
                dr4("影响时限") = dr3("结案时间").AddMonths(48)
            End If
        ElseIf djcf.Contains("撤消党内职务") Then
            If Not dr3.IsNull("结案时间") Then
                dr4("影响时限") = dr3("结案时间").AddMonths(24)
            End If
        ElseIf djcf.Contains("严重警告")  Then
            If Not dr3.IsNull("结案时间") Then
                dr4("影响时限") = dr3("结案时间").AddMonths(18)
            End If
        ElseIf djcf.Contains("警告") Then
            If Not dr3.IsNull("结案时间") Then
                dr4("影响时限") = dr3("结案时间").AddMonths(12)
            End If
        ElseIf djcf.Contains("延长预备期一年") Then
            If Not dr3.IsNull("结案时间") Then
                dr4("影响时限") = dr3("结案时间").AddMonths(12)
            End If
        Else
            If Not dr3.IsNull("结案时间") Then
                dr4("影响时限") = dr3("结案时间")
            End If
        End If
    Next
Next


--  作者:有点蓝
--  发布时间:2021/9/10 17:40:00
--  
函数在什么事件调用的?

异步函数里不能使用datatable:http://www.foxtable.com/mobilehelp/topics/277.htm

--  作者:zxlid
--  发布时间:2021/9/10 17:50:00
--  
谢谢有点蓝老师!,针对我这个例,给我指点一下具体的解决办法,好吗
--  作者:有点蓝
--  发布时间:2021/9/11 8:56:00
--  
方法1、可以在异步函数里使用SQLCommand获取需要处理的表进行处理
2、把前3个表合并为一个查询表(如果是SqlServer可以设计为视图),然后遍历这个查询表进行处理。或者考虑是sql:insert into ...select...这种语法直接一条sql处理
3、这种需要长时间处理的数据如果不是即时需要使用的,可以专门做个项目,放到服务器24小时运行,做个计划管理,每晚2点自动处理。


--  作者:zxlid
--  发布时间:2021/9/11 14:09:00
--  
有点蓝老师,非常感谢!