Foxtable(狐表)用户栏目专家坐堂 → 效率慢,如何优化


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

主题:效率慢,如何优化

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


加好友 发短信
等级:童狐 帖子:204 积分:1738 威望:0 精华:0 注册:2018/8/23 14:16:00
效率慢,如何优化  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

13000的数据,用时190秒

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106616 积分:542257 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

门店进销存_总数据 ,门店进销存_门店进销存是通过 GroupTablesbuilder生成的临时表,
门店进销存_门店进销存是通过11个表格汇总生成的

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

那就没有办法了。这种多表处理结算类的功能,建议专门做个项目,放到服务器,没有什么用使用系统的时候执行,比如半夜2点。

如果需要即时计算的,要么耐心等候,要么考虑改为使用sql处理

 回到顶部