以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  保存时间比较长  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=184686)

--  作者:nuoyan89
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2022/12/22 13:48:00
--  
遍历dt4是干嘛用的?dt1又是什么鬼?
--  作者:nuoyan89
--  发布时间: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()

--  作者:有点蓝
--  发布时间:2022/12/22 13:59:00
--  
遍历dt4是干嘛用的
--  作者:nuoyan89
--  发布时间: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()


--  作者:有点蓝
--  发布时间:2022/12/22 14:47:00
--  
代码没有什么办法改进了,动不动都操作几十万的数据,考虑学学使用sql吧。

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

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