以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 代码优化问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=164286) |
-- 作者:zaq3574020 -- 发布时间:2021/5/4 19:11:00 -- 代码优化问题 For Each r As Row In Tables("门店进销存_门店进销存").Rows Dim dr As DataRow = DataTables("直调入库单明细").Find("款号=\'" & r("款号") & "\' and 仓库=\'" & r("仓库") & "\' ") If dr IsNot Nothing Then r("第一次上货日期") = dr("日期") r("今天日期") = Date.Today Dim t1 As TimeSpan = r("今天日期") - r("第一次上货日期") r("第一次上货天数") = t1.TotalDays End If Next 以上代码怎么优化 问题1:这个遍历查询需要怎么改
问题2:DataTables("直调入库单明细")初始加载40W条数据,如果不加载,那每次一个ROW执行后台查询一次。这个会提高效率吗。Tables("门店进销存_门店进销存")是组合统计生成的临时表 |
-- 作者:有点蓝 -- 发布时间:2021/5/5 11:56:00 -- 每次一个ROW执行后台查询一次会更慢,可能慢上几十倍。 数据多,如果门店进销存也是数据里的表,建议直接使用sql处理 如果门店进销存是临时表 1、如果门店进销存数据也多,建议把数据合成为xml,或者字符串传入存储过程,在存储过程里处理 2、如果数据不多,建议先根据门店进销存的"款号和仓库添加先加载"直调入库单明细"符合条件的数据,再处理
|
-- 作者:zaq3574020 -- 发布时间:2021/5/5 13:40:00 -- 业务逻辑是这样的: 1、通过多个GroupTablesBuilder生成临时表 门店进销存 2.然后遍历(门店进销存)根据A门店A款商品,在出入库明细查询第一次入库的信息。并填充。
|
-- 作者:有点蓝 -- 发布时间:2021/5/5 14:02:00 -- 把GroupTablesBuilder改为使用sql分组统计,然后直接使用sql填充,比如: update a set 第一次上货日期=日期,今天日期=getdate() from 表A as a inner join (Select 产品名称,sum(数量),min(日期) FROM {订单} INNER JOIN {产品} ON {订单}.产品ID = {产品}.产品ID group by 产品名称) as b on a.xxx = b.xxx 如果一条sql搞不定的,也可以使用存储过程,分步处理
|