Foxtable(狐表)用户栏目专家坐堂 → [求助]执行内部函数死循环


  共有3397人关注过本帖树形打印复制链接

主题:[求助]执行内部函数死循环

帅哥哟,离线,有人找我吗?
zxlid
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:232 积分:2884 威望:0 精华:0 注册:2012/2/25 22:10:00
[求助]执行内部函数死循环  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/10 17:40:00 [只看该作者]

函数在什么事件调用的?

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

 回到顶部
帅哥哟,离线,有人找我吗?
zxlid
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:232 积分:2884 威望:0 精华:0 注册:2012/2/25 22:10:00
  发帖心情 Post By:2021/9/10 17:50:00 [只看该作者]

谢谢有点蓝老师!,针对我这个例,给我指点一下具体的解决办法,好吗

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/11 8:56:00 [只看该作者]

方法1、可以在异步函数里使用SQLCommand获取需要处理的表进行处理
2、把前3个表合并为一个查询表(如果是SqlServer可以设计为视图),然后遍历这个查询表进行处理。或者考虑是sql:insert into ...select...这种语法直接一条sql处理
3、这种需要长时间处理的数据如果不是即时需要使用的,可以专门做个项目,放到服务器24小时运行,做个计划管理,每晚2点自动处理。


 回到顶部
帅哥哟,离线,有人找我吗?
zxlid
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:232 积分:2884 威望:0 精华:0 注册:2012/2/25 22:10:00
  发帖心情 Post By:2021/9/11 14:09:00 [只看该作者]

有点蓝老师,非常感谢!

 回到顶部