以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 效率慢,如何优化 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177178) |
-- 作者:zaq3574020 -- 发布时间:2022/5/11 22:13:00 -- 效率慢,如何优化 逻辑是:查询总进销存每列数据是否存在于门店进销存,不存在就新增并赋值。但是这个写法,效率太慢了。不知道如何解决 Dim mdjxc As DataRow Dim dr As DataRow Dim dic As New Dictionary(Of DataRow,Row) If mx.Checked Then For Each r As Row In Tables("门店进销存_总数据").Rows mdjxc = DataTables("门店进销存_门店进销存").Find("款号=\'" & r("款号") & "\'And 花色=\'" & r("花色") & "\'and 尺码=\'" & r("尺码") & "\'and 仓库=\'" & r("仓库") & "\'") If mdjxc Is Nothing Then dr = DataTables("门店进销存_门店进销存").AddNew dic.Add(dr,r) End If Next Else For Each r As Row In Tables("门店进销存_总数据").Rows mdjxc = DataTables("门店进销存_门店进销存").Find("款号=\'" & r("款号") & "\'And 仓库=\'" & r("仓库") & "\'") If mdjxc Is Nothing Then dr = DataTables("门店进销存_门店进销存").AddNew dic.Add(dr,r) End If Next End If If mx.Checked Then For Each drs As DataRow In dic.Keys drs("款号") = dic(drs)("款号") drs("花色") = dic(drs)("花色") drs("尺码") = dic(drs)("尺码") drs("品类") = dic(drs)("品类") drs("品名") = dic(drs)("品名") drs("仓库") = dic(drs)("仓库") drs("吊牌价") = dic(drs)("吊牌价") drs("实入数量") = "0" drs("销售数量") = "0" drs("剩余") = "0" Next Else For Each drs As DataRow In dic.Keys drs("款号") = dic(drs)("款号") drs("品类") = dic(drs)("品类") drs("品名") = dic(drs)("品名") drs("吊牌价") = dic(drs)("吊牌价") drs("仓库") = dic(drs)("仓库") drs("实入数量") = "0" drs("销售数量") = "0" drs("剩余") = "0" Next End If [此贴子已经被作者于2022/5/11 22:15:23编辑过]
|
-- 作者:zaq3574020 -- 发布时间:2022/5/11 22:28:00 -- 13000的数据,用时190秒 |
-- 作者:有点蓝 -- 发布时间:2022/5/12 9:15:00 -- 试试 If mx.Checked Then For Each r As dataRow In dataTables("门店进销存_总数据").sqlselect("not exists(select 1 from {门店进销存_门店进销存} as a where a.款号={门店进销存_总数据}.款号 and a.花色={门店进销存_总数据}.花色 and a.尺码={门店进销存_总数据}.尺码 and a.仓库={门店进销存_总数据}.仓库)") dr = DataTables("门店进销存_门店进销存").AddNew dic.Add(dr,r) Next Else |
-- 作者:zaq3574020 -- 发布时间:2022/5/12 16:48:00 -- 门店进销存_总数据 ,门店进销存_门店进销存是通过 GroupTablesbuilder生成的临时表, 门店进销存_门店进销存是通过11个表格汇总生成的 |
-- 作者:有点蓝 -- 发布时间:2022/5/12 16:54:00 -- 那就没有办法了。这种多表处理结算类的功能,建议专门做个项目,放到服务器,没有什么用使用系统的时候执行,比如半夜2点。 如果需要即时计算的,要么耐心等候,要么考虑改为使用sql处理
|