以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- if 分支多了增加行很慢 (http://foxtable.com/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("订单_产品主表").CurrentDim 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 = TrueIf 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判断,比如增加一个公式表,类似下面 然后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 -- 查出来了 收了外部其他判断代码的影响 去除后正常了 |