Foxtable(狐表)用户栏目专家坐堂 → 代码优化问题


  共有2696人关注过本帖树形打印复制链接

主题:代码优化问题

帅哥哟,离线,有人找我吗?
zaq3574020
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:204 积分:1738 威望:0 精华:0 注册:2018/8/23 14:16:00
代码优化问题  发帖心情 Post By: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("门店进销存_门店进销存")是组合统计生成的临时表

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106688 积分:542629 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/5 11:56:00 [只看该作者]

每次一个ROW执行后台查询一次会更慢,可能慢上几十倍。

数据多,如果门店进销存也是数据里的表,建议直接使用sql处理

如果门店进销存是临时表
1、如果门店进销存数据也多,建议把数据合成为xml,或者字符串传入存储过程,在存储过程里处理
2、如果数据不多,建议先根据门店进销存的"款号和仓库添加先加载"直调入库单明细"符合条件的数据,再处理

 回到顶部
帅哥哟,离线,有人找我吗?
zaq3574020
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:204 积分:1738 威望:0 精华:0 注册:2018/8/23 14:16:00
  发帖心情 Post By:2021/5/5 13:40:00 [只看该作者]

业务逻辑是这样的:
1、通过多个GroupTablesBuilder生成临时表 门店进销存
2.然后遍历(门店进销存)根据A门店A款商品,在出入库明细查询第一次入库的信息。并填充。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106688 积分:542629 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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搞不定的,也可以使用存储过程,分步处理

 回到顶部