以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]代码优化的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=160304)

--  作者:81538475
--  发布时间:2021/1/28 13:25:00
--  [求助]代码优化的问题
目前有段代码是为了把“内网数据源”的数据读取出来的功能,但是目前由于里面的 遍历行的代码,所以导致运行很慢,想问下这种有没有可能用 SQLReplaceFor 或者其他什么方式简化呢。

Dim ps As String = args(0)  \'-----部门

Dim ncb1 As WinForm.NumericComboBox = Forms("任务插入").Controls("NumericComboBox1")

If Connections.Contains("内网数据源") =True Then
    \'Dim st2 As Date = Date.Now
    
    Dim d As Date= Date.Today.AddMonths(0 - ncb1.Value)
    Dim d1 As Date = New Date(d.Year,d.Month,1) \'最近两个月的进度记录
  
    Dim rwjl As New SQLCommand
    rwjl.C
    rwjl.CommandText = "SE/ECT _identify,日期,编号,任务状态,当前进度,预期进度,提审内容,通过截图 From {任务进度记录} where 日期>= \'" & d1 &"\' And 部门 In (" & ps & ")"
    dtrw= rwjl.ExecuteReader(True)
    
    \'=-------确认办公地点属于哪个分部
    Dim gs As String
    Dim cmd As New SQLCommand
    CMD.C
    cmd.CommandText = "Se/ect 归属地 From {服务器连接列表} Where 办公地点 = \'"& SQLselect &"\'"
    gs = cmd.ExecuteScalar()
    systemready =False
    For Each r1 As DataRow In DataTables("XMFP").DataRows
        Dim rdd As DataRow = dtry.Find("姓名 = \'" & r1("成员") &"\'")
        If rdd IsNot Nothing Then
            \'---------------
            \'test += r1("成员")
            If rdd("人员归属")= gs Then
                If r1("任务状态")<> "通过"  Then
                    
                    Dim max As Date
                    max= dtrw.Compute("max(日期)","编号 = \'"& r1("_identify") &"\'")
                    Dim fdr1 As DataRow = dtrw.Find("编号= \'"& r1("_identify") & "\'and 日期 = \'"& max &"\' ")
                    Dim fdr2 As DataRow = dtrw.Find("编号= \'"& r1("_identify") & "\'and 日期 = \'"& date.Today &"\' ")
                    Dim fdr3 As DataRow = dtrw.Find("编号= \'"& r1("_identify") & "\'and (通过截图 is not null or 通过截图 <>\'\')")  \'----------------找通过截图行
                    
                    \'Dim fdrxx As DataRow = dtrw.Find("编号= \'23240\'and 日期 = \'"& max &"\' ")
                    If fdr1 IsNot Nothing AndAlso (r1("任务状态")<> "待截图" AndAlso r1("任务状态")<> "关闭")  Then
                        r1("任务状态") = fdr1("任务状态")
                    End If
                    If fdr2 IsNot Nothing Then
                        
                        r1("当前进度") = fdr2("当前进度")
                    End If
                    If fdr3 IsNot Nothing Then
                        
                       
                        
                        r1("通过截图")=fdr3("通过截图")
                      
                        r1.Save
                    End If
                End If
                
                
                
                
            End If
        End If
        \'
    Next
    systemready =True
  
End If

--  作者:有点蓝
--  发布时间:2021/1/28 14:08:00
--  
没看懂这些业务逻辑。如果数据需要复杂计算的没有办法的。

截图说明一下,什么表的什么数据,根据什么规则进行更新?

--  作者:81538475
--  发布时间:2021/1/28 14:23:00
--  
DataTables("XMFP")  这个是一个任务表,是由管理员添加的,然后 内网数据源的 任务进度记录 是由组员添加的。这两个表在两个不同的数据源。现在希望加载“XMFP” 表的时候,能够吧内网数据源中员工填写的信息根据上面的一些条件同步到“XMFP”表对应的行上面。
--  作者:有点蓝
--  发布时间:2021/1/28 14:35:00
--  
上面只是描述了一个过程,对于具体的业务逻辑我还是不懂

截图说明一下,什么表的什么数据,根据什么规则进行更新?