以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  字典的应用  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189281)

--  作者:creastzh
--  发布时间:2023/11/21 21:05:00
--  字典的应用
我有一个逻辑运算,需要引用多个表的数据, 按照常规做法,我可以使用行的各单元格赋值方式进行,然后逐行处理, 但这种方式运行效率很低,我一个表的全部数据行运算一遍需要340多秒, 所以想改用字典方式,然后进行字典数据一次性写入处理,但由于多个表的使用,以及中间需要根据不同结果(IF)写入不同值的判断, 似乎字典方式感觉无从下手, 想请问是否有更好的方式, 谢谢!
以是中间一段程序:
                Dim dr2n As DataRow = dt2.AddNew(1) 
                Dim dr3 As DataRow = dt3.Find("ResID =\'" & Res & "\'") 
                dr2n("Date") = Date.Today
                If dr3 IsNot Nothing Then
                    dr2n("ProblemLocation") = dr3("适用于标准化后的班组名称") \'班组
                End If
                dr2n("IssueNo") = QN
                dr2n("DataSource") = "生产问题跟踪"
                dr2n("NeedtoTrace") = True
                dr2n("Registrant") = "系统" \'登记人
                dr2n("Transtype") = "R" \'来源
                \'dr2n("NPI=1Mass=0") = dr1("") \'NPI
                dr2n("WO") = dr1("WO") \'工单号
                dr2n("PartNumber") = dr1("PartNumber") \'零件号
                dr2n("OP") = dr1("OP") \'工序号
                dr2n("ResID") = dr1("ResID") \'资源号
                dr2n("WOQTY") = dr1("ACTQty_IN") \'工序数
                t = t + 1
                If CmpTimePre > #1-1-2020# Then
                    Dim zy As Single \'转移工序的时间                    
                    zy = ( CDate(dr1("Act_StartTime")) - CmpTimePre).TotalHours
                    If zy < 24 Then \'上工序到本工序间的停留<24小时 (工序滞留超过1天)
                        dr2n("IssueType") = "上工序延误" \'问题种类
                        dr2n("ResponsibleTeam") = ResCell \'责任部门
                    Else
                        dr2n("IssueType") = "工序停滞" \'问题种类        
                    End If
                Else
                    dr2n("IssueType") = "工序停滞" \'问题种类
                End If 
                
                dr2n("IssueDescription") = nr \'问题描述
                dr2n("IssueAffect") = "交期晚" \'后果
                dr2n("DelayHours") = yw \'延误(Hrs)                    
                \'dr2n("Person责任人") = dr1("") \'责任人
                
                Dim dr4 As DataRow = DataTables("PartList").Find("PartNumber= \'" & PN & "\'")
                If dr4 IsNot Nothing Then 
                    dr2n("QE") = dr4("QE") \'QE
                    dr2n("ME") = dr4("ME") \'ME
                End If
            

--  作者:creastzh
--  发布时间:2023/11/21 21:11:00
--  
我能想到的是,已dr2n为key建立多个字典, 然后分别进行读取写入,还有其它方法吗? 谢谢!
--  作者:有点蓝
--  发布时间:2023/11/21 21:39:00
--  
看不懂。

请截图说明:有几个表的数据要计算?表结构和数据都是怎么样的?需要按什么逻辑做怎么样的计算?