以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  if 分支多了增加行很慢  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=176689)

--  作者:yifan3429
--  发布时间:2022/4/22 18:53:00
--  if 分支多了增加行很慢
下面的代码增加行很慢  是代码问题吗  怎么优化 


For Each Name As String In Names
                Dim wr As Row = Tables("订单_产品主表").Current
                Dim nr As Row = Tables("订单_产品清单").AddNew
                nr("报价分类") = wr("报价分类")
                nr("订单类别") = wr("订单类别")
                nr("订单信息") = wr("订单信息")
                nr("客户信息") = wr("客户信息")
                nr("订单ID") = wr("订单ID")
                nr("报价ID") = wr("报价ID")
                nr("客户信息") = wr("客户信息")
                nr("区域楼层") = wr("区域楼层")
                nr("区域名称") = wr("区域名称")
                nr("产品订购ID") = wr("产品订购ID")
                nr("产品_构件名称") = Name
                nr("产品模块") = "木作报价"
                nr("产品分类") = wr("产品分类")
                nr("客户信息") = wr("客户信息")
                nr("日期") = Date.Today
                
                If nr("产品_构件名称").Contains("柜体") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("宽")
                    nr("厚") = wr("厚")
                    nr("数量") = 1
                    nr("计价单位") = "投影面积"
                ElseIf nr("产品_构件名称").Contains("柜门") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("宽")
                    nr("厚") = 22
                    nr("数量") = 1
                    nr("计价单位") = "平方米"
                ElseIf nr("产品_构件名称").Contains("见光") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("厚") + 100
                    nr("厚") = 18
                    nr("数量") = 1
                    nr("计价单位") = "平方米"                    
                ElseIf nr("产品_构件名称").Contains("台面") Then
                    nr("长") = wr("长")
                    nr("数量") = 1
                    nr("计价单位") = "延米"                    
                ElseIf nr("产品_构件名称").Contains("灯光") Then
                    nr("长") = wr("长")
                    nr("数量") = 3
                    nr("计价单位") = "延米"
                ElseIf nr("产品_构件名称").Contains("变压") Then
                    nr("数量") = 1
                    nr("计价单位") = "套"
                ElseIf nr("产品_构件名称").Contains("衣杆") Then
                    nr("数量") = wr("长") * 2.5
                    nr("计价单位") = "延米"
                ElseIf nr("产品_构件名称").Contains("门铰") Then
                    nr("数量") = (wr("长") * wr("宽")*0.0001) / 15
                    Round2(nr("数量"),1)
                    nr("计价单位") = "个"
                ElseIf nr("产品_构件名称").Contains("抽") Then
                    nr("数量") = (wr("长") * wr("宽")*0.000001) / 3.5
                    nr("计价单位") = "件"
                ElseIf nr("产品_构件名称").Contains("墙板") Then
                    nr("数量") = (wr("长") * wr("宽")*0.000001) * 1.05
                    nr("计价单位") = "平方米"
                ElseIf nr("产品_构件名称").Contains("线") Then
                    nr("数量") = wr("长") + 200
                    nr("计价单位") = "延米"
                Else
                End If
            Next
        Else
            Forms("产品清单").Open
        End If


--  作者:程兴刚
--  发布时间:2022/4/22 19:03:00
--  
Dim wr As Row = Tables("订单_产品主表").Current
Dim nr As Row
For Each Name As String In Names
                nr = Tables("订单_产品清单").AddNew
                nr("报价分类") = wr("报价分类")
                nr("订单类别") = wr("订单类别")
                nr("订单信息") = wr("订单信息")
                nr("客户信息") = wr("客户信息")
                nr("订单ID") = wr("订单ID")
                nr("报价ID") = wr("报价ID")
                nr("客户信息") = wr("客户信息")
                nr("区域楼层") = wr("区域楼层")
                nr("区域名称") = wr("区域名称")
                nr("产品订购ID") = wr("产品订购ID")
                nr("产品_构件名称") = Name
                nr("产品模块") = "木作报价"
                nr("产品分类") = wr("产品分类")
                nr("客户信息") = wr("客户信息")
                nr("日期") = Date.Today
                
                If nr("产品_构件名称").Contains("柜体") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("宽")
                    nr("厚") = wr("厚")
                    nr("数量") = 1
                    nr("计价单位") = "投影面积"
                ElseIf nr("产品_构件名称").Contains("柜门") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("宽")
                    nr("厚") = 22
                    nr("数量") = 1
                    nr("计价单位") = "平方米"
                ElseIf nr("产品_构件名称").Contains("见光") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("厚") + 100
                    nr("厚") = 18
                    nr("数量") = 1
                    nr("计价单位") = "平方米"                    
                ElseIf nr("产品_构件名称").Contains("台面") Then
                    nr("长") = wr("长")
                    nr("数量") = 1
                    nr("计价单位") = "延米"                    
                ElseIf nr("产品_构件名称").Contains("灯光") Then
                    nr("长") = wr("长")
                    nr("数量") = 3
                    nr("计价单位") = "延米"
                ElseIf nr("产品_构件名称").Contains("变压") Then
                    nr("数量") = 1
                    nr("计价单位") = "套"
                ElseIf nr("产品_构件名称").Contains("衣杆") Then
                    nr("数量") = wr("长") * 2.5
                    nr("计价单位") = "延米"
                ElseIf nr("产品_构件名称").Contains("门铰") Then
                    nr("数量") = (wr("长") * wr("宽")*0.0001) / 15
                    Round2(nr("数量"),1)
                    nr("计价单位") = "个"
                ElseIf nr("产品_构件名称").Contains("抽") Then
                    nr("数量") = (wr("长") * wr("宽")*0.000001) / 3.5
                    nr("计价单位") = "件"
                ElseIf nr("产品_构件名称").Contains("墙板") Then
                    nr("数量") = (wr("长") * wr("宽")*0.000001) * 1.05
                    nr("计价单位") = "平方米"
                ElseIf nr("产品_构件名称").Contains("线") Then
                    nr("数量") = wr("长") + 200
                    nr("计价单位") = "延米"
                Else
                End If
            Next
        Else
            Forms("产品清单").Open
        End If



--  作者:程兴刚
--  发布时间:2022/4/22 19:04:00
--  
代码不全,最前面少了if判断
--  作者:yifan3429
--  发布时间:2022/4/22 19:41:00
--  
 完整代码 老师看看

Case "新增明细"
        pause = True
        If Tables("订单_产品主表").Current Is Nothing Then \'如果Current为Nothing
            MessageBox.Show("没有报价资源",Vars("昵称"))
            Return "" \'则返回
        End If
        If DataTables.Contains("订单_产品清单") = False Then \'如果表C没有加载
            DataTables.Load("订单_产品清单") \'加载表C
        End If
               
            Dim r As Row = Tables("订单_产品主表").Current
            If r IsNot Nothing
                Dim Cols1() As String = {"区域名称","区域楼层","产品名称","长","宽","厚","订单ID"}
                For Each c As String In Cols1
                    If r.IsNull(c) Then
                        r.DataRow.SetError(c, "不能为空")
                        MessageBox.Show(c &"不能为空",Vars("昵称"))
                        Return ""
                    End If
                Next
            End If
            
            Dim cmd As New SQLC ommand
            cmd.ConnectionNa me = "2022"
            cmd.CommandT ext = "Sel ect * From {系统_数据模块}"
            wdt = cmd.Execute Reader()
            Dim dr As Data Row
            \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr
            dr = wdt.SQLFind("[模块类别]  =\'木作报价模块\'and [模块名称] = \'"& Tables("订单_产品主表").Current("产品分类") & "\'" )
            Dim Value As String = dr("参数_A")
            Dim sps() As Char = {"|"}
            Dim Names() As String  = Value.Split(sps)
            \'If e.Form.Controls("同空间").Checked = True Then
            For Each Name As String In Names
                Dim wr As Row = Tables("订单_产品主表").Current
                Dim nr As Row = Tables("订单_产品清单").AddNew
                nr("报价分类") = wr("报价分类")
                nr("订单类别") = wr("订单类别")
                nr("订单信息") = wr("订单信息")
                nr("客户信息") = wr("客户信息")
                nr("订单ID") = wr("订单ID")
                nr("报价ID") = wr("报价ID")
                nr("客户信息") = wr("客户信息")
                nr("区域楼层") = wr("区域楼层")
                nr("区域名称") = wr("区域名称")
                nr("产品订购ID") = wr("产品订购ID")
                nr("产品_构件名称") = Name
                nr("产品模块") = "木作报价"
                nr("产品分类") = wr("产品分类")
                nr("客户信息") = wr("客户信息")
                nr("日期") = Date.Today
                
                If nr("产品_构件名称").Contains("柜体") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("宽")
                    nr("厚") = wr("厚")
                    nr("数量") = 1
                    nr("计价单位") = "投影面积"
                ElseIf nr("产品_构件名称").Contains("柜门") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("宽")
                    nr("厚") = 22
                    nr("数量") = 1
                    nr("计价单位") = "平方米"
                ElseIf nr("产品_构件名称").Contains("见光") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("厚") + 100
                    nr("厚") = 18
                    nr("数量") = 1
                    nr("计价单位") = "平方米"
                ElseIf nr("产品_构件名称").Contains("台面") Then
                    nr("长") = wr("长")
                    nr("数量") = 1
                    nr("计价单位") = "延米"
                ElseIf nr("产品_构件名称").Contains("灯光") Then
                    nr("长") = wr("长")
                    nr("数量") = 3
                    nr("计价单位") = "延米"
                ElseIf nr("产品_构件名称").Contains("变压") Then
                    nr("数量") = 1
                    nr("计价单位") = "套"
                ElseIf nr("产品_构件名称").Contains("衣杆") Then
                    nr("数量") = wr("长") * 2.5
                    nr("计价单位") = "延米"
                ElseIf nr("产品_构件名称").Contains("门铰") Then
                    nr("数量") = (wr("长") * wr("宽")*0.0001) / 15
                    Round2(nr("数量"),1)
                    nr("计价单位") = "个"
                ElseIf nr("产品_构件名称").Contains("抽") Then
                    nr("数量") = (wr("长") * wr("宽")*0.000001) / 3.5
                    nr("计价单位") = "件"
                ElseIf nr("产品_构件名称").Contains("墙板") Then
                    nr("长") = wr("长")
                    nr("宽") = wr("宽")
                    nr("厚") = wr("厚")
                    nr("数量") = 1
                    nr("计价单位") = "平方米"
                ElseIf nr("产品_构件名称").Contains("线") Then
                    nr("数量") = wr("长") + 200
                    nr("计价单位") = "延米"
                Else
                End If
            Next
       

[此贴子已经被作者于2022/4/22 23:41:52编辑过]

--  作者:程兴刚
--  发布时间:2022/4/23 0:27:00
--  
也只能这样了,快不到哪里去,区区几个判断并不影响速度,检查前面的代码:

Case "新增明细"
    pause = True
    If Tables("订单_产品主表").Current Is Nothing Then \'如果Current为Nothing
    MessageBox.Show("没有报价资源", Vars("昵称"))
    Return "" \'则返回
    End If
    If DataTables.Contains("订单_产品清单") = False Then \'如果表C没有加载
    DataTables.Load("订单_产品清单") \'加载表C
    End If

    Dim r As Row = Tables("订单_产品主表").Current
    If r IsNot Nothing Then
    Dim Cols1() As String = {"区域名称", "区域楼层", "产品名称", "长", "宽", "厚", "订单ID" }
    For Each c As String In Cols1
        If r.IsNull(c) Then
        r.DataRow.SetError(c, "不能为空")
        MessageBox.Show(c & "不能为空", Vars("昵称"))
        Return ""
        End If
    Next
    End If

    Dim cmd As New SQLC ommand
    cmd.ConnectionNa Me = "2022"
    cmd.CommandT ext = "Sel ect * From {系统_数据模块}"
    wdt = cmd.Execute Reader()
    Dim dr As Data Row
    \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr
    dr = wdt.SQLFind("[模块类别]  =\'木作报价模块\'and [模块名称] = \'" & Tables("订单_产品主表").Current("产品分类") & "\'")
    Dim Value As String = dr("参数_A")
    Dim Names(), Values() As String
    Names = Value.Split("|")
    \'If e.Form.Controls("同空间").Checked = True Then
    Dim wr As Row = Tables("订单_产品主表").Current
    Dim s As String = "报价分类|订单类别|订单信息|客户信息|订单ID|报价ID|客户信息|区域楼层|区域名称|产品订购ID|产品分类|客户信息"
     Values = S.Split("|")
    For Each Name As String In Names
        Dim nr As Row = Tables("订单_产品清单").AddNew
        For Index As Integer = 0 To Values.Length - 1 \'优点:以后不管增减多少父子表相同字段,只需改变变量S的值即可
            nr(Values(Index)) = (Values(Index))
        Next
        nr("产品_构件名称") = Name
        nr("产品模块") = "木作报价"
        nr("日期") = Date.Today
        If nr("产品_构件名称").Contains("柜体") Then
        nr("长") = wr("长")
        nr("宽") = wr("宽")
        nr("厚") = wr("厚")
        nr("数量") = 1
        nr("计价单位") = "投影面积"
        ElseIf nr("产品_构件名称").Contains("柜门") Then
            nr("长") = wr("长")
            nr("宽") = wr("宽")
            nr("厚") = 22
            nr("数量") = 1
            nr("计价单位") = "平方米"
        ElseIf nr("产品_构件名称").Contains("见光") Then
            nr("长") = wr("长")
            nr("宽") = wr("厚") + 100
            nr("厚") = 18
            nr("数量") = 1
            nr("计价单位") = "平方米"
        ElseIf nr("产品_构件名称").Contains("台面") Then
            nr("长") = wr("长")
            nr("数量") = 1
            nr("计价单位") = "延米"
        ElseIf nr("产品_构件名称").Contains("灯光") Then
            nr("长") = wr("长")
            nr("数量") = 3
            nr("计价单位") = "延米"
        ElseIf nr("产品_构件名称").Contains("变压") Then
            nr("数量") = 1
            nr("计价单位") = "套"
        ElseIf nr("产品_构件名称").Contains("衣杆") Then
            nr("数量") = wr("长") * 2.5
            nr("计价单位") = "延米"
        ElseIf nr("产品_构件名称").Contains("门铰") Then
            nr("数量") = (wr("长") * wr("宽") * 0.0001) / 15
            Round2(nr("数量"), 1)
            nr("计价单位") = "个"
        ElseIf nr("产品_构件名称").Contains("抽") Then
            nr("数量") = (wr("长") * wr("宽") * 0.000001) / 3.5
            nr("计价单位") = "件"
        ElseIf nr("产品_构件名称").Contains("墙板") Then
            nr("长") = wr("长")
            nr("宽") = wr("宽")
            nr("厚") = wr("厚")
            nr("数量") = 1
            nr("计价单位") = "平方米"
        ElseIf nr("产品_构件名称").Contains("线") Then
            nr("数量") = wr("长") + 200
            nr("计价单位") = "延米"
        Else
        End If
    Next

您的代码依然不全!

--  作者:有点蓝
--  发布时间:2022/4/23 9:46:00
--  
换种方式替代if判断,比如增加一个公式表,类似下面

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

然后if分支可以改为查表处理
Dim dr As DataRow = DataTables("表C").Find("构件名称=\'" & nr("产品_构件名称") & "\'")
If dr IsNot Nothing Then
    If dr.IsNull("长") = False Then
        nr("长") = Eval(dr("长").replace("[长]", wr("长")).replace("[宽]", wr("宽")).replace("[厚]", wr("厚")))
    End If
    If dr.IsNull("宽") = False Then
        nr("宽") = Eval(dr("宽").replace("[长]", wr("长")).replace("[宽]", wr("宽")).replace("[厚]", wr("厚")))
    End If
    If dr.IsNull("厚") = False Then
        nr("厚") = Eval(dr("厚").replace("[长]", wr("长")).replace("[宽]", wr("宽")).replace("[厚]", wr("厚")))
    End If
    If dr.IsNull("数量") = False Then
        nr("数量") = Eval(dr("数量").replace("[长]", wr("长")).replace("[宽]", wr("宽")).replace("[厚]", wr("厚")))
    End If
    nr("计价单位") = dr("计价单位")
End If


--  作者:yifan3429
--  发布时间:2022/4/24 20:50:00
--  
查出来了 收了外部其他判断代码的影响 去除后正常了