Foxtable(狐表)用户栏目专家坐堂 → 保存时间比较长


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

主题:保存时间比较长

美女呀,离线,留言给我吧!
nuoyan89
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:503 积分:3495 威望:0 精华:0 注册:2020/10/9 8:45:00
保存时间比较长  发帖心情 Post By:2022/12/22 13:29:00 [只看该作者]

老师,以下用来更新后台数据时因《出入库明细》表中明细比较多(目前60万条)每次点击保存时好慢,要等3分钟的样子,有什么方法可以优化吗?
For Each dr4 As Row In Tables("出入库明细").Rows
    For Each dr As DataRow In dt1.dataRows
        Dim drs As List(Of DataRow) = DataTables("出入库明细").sqlSelect("成品编码 = '" & dr("成品编码") & "' and 采购订单号 = '" & dr("采购订单号") & "' and 单据类型 = '入库'")
        For Each dr2 As DataRow In drs
            dr2("出库数量") = dr("出库数量")
        Next
        DataTables("出入库明细").SQLUpdate(drs)
    Next
Next
DataTables("出入库明细").loadfilter = ""
DataTables("出入库明细").load
DataTables("出入库明细").Save()
[此贴子已经被作者于2022/12/22 13:29:49编辑过]

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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/22 13:48:00 [只看该作者]

遍历dt4是干嘛用的?dt1又是什么鬼?

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:503 积分:3495 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/12/22 13:53:00 [只看该作者]

老师,这个是全代码。

DataTables("零件库领料单_出库").Save()
DataTables("零件库领料单_出库").RemoveFor("")
Dim b As New SQLGroupTableBuilder("统计表1", "出入库明细")
b.C
b.Groups.AddDef("成品编码") '根据产品分组
b.Groups.AddDef("采购订单号") '根据产品分组
b.Totals.AddDef("出库数量") '对数量进行统计
b.Filter = "[单据类型] = '出库'"
Dim dt1 As DataTable = b.Build(True)
For Each dr4 As Row In Tables("出入库明细").Rows
    For Each dr As DataRow In dt1.dataRows
        Dim drs As List(Of DataRow) = DataTables("出入库明细").sqlSelect("成品编码 = '" & dr("成品编码") & "' and 采购订单号 = '" & dr("采购订单号") & "' and 单据类型 = '入库'")
        For Each dr2 As DataRow In drs
            dr2("出库数量") = dr("出库数量")
        Next
        DataTables("出入库明细").SQLUpdate(drs)
    Next
Next
DataTables("出入库明细").loadfilter = ""
DataTables("出入库明细").load
DataTables("出入库明细").Save()

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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/22 13:59:00 [只看该作者]

遍历dt4是干嘛用的

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:503 积分:3495 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/12/22 14:03:00 [只看该作者]

遍历4是不需要的,我改过了。
DataTables("零件库领料单_出库").Save()
DataTables("零件库领料单_出库").RemoveFor("")
Dim b As New SQLGroupTableBuilder("统计表1", "出入库明细")
b.C
b.Groups.AddDef("成品编码") '根据产品分组
b.Groups.AddDef("采购订单号") '根据产品分组
b.Totals.AddDef("出库数量") '对数量进行统计
b.Filter = "[单据类型] = '出库'"
Dim dt1 As DataTable = b.Build(True)
    For Each dr As DataRow In dt1.dataRows
        Dim drs As List(Of DataRow) = DataTables("出入库明细").sqlSelect("成品编码 = '" & dr("成品编码") & "' and 采购订单号 = '" & dr("采购订单号") & "' and 单据类型 = '入库'")
        For Each dr2 As DataRow In drs
            dr2("出库数量") = dr("出库数量")
        Next
        DataTables("出入库明细").SQLUpdate(drs)
    Next
DataTables("出入库明细").loadfilter = ""
DataTables("出入库明细").load
DataTables("出入库明细").Save()


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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/22 14:47:00 [只看该作者]

代码没有什么办法改进了,动不动都操作几十万的数据,考虑学学使用sql吧。

或者考虑改进一下业务逻辑,做月结,季结等。更新只需要更新当月,当季等数据即可。

一个表既做入库又做出库本身就不是合理的做法,现在只是慢,估计半年后程序和人都要崩溃了

 回到顶部