以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  效率慢,如何优化  (http://foxtable.com/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处理