以文本方式查看主题

-  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=161197)

--  作者:zaq3574020
--  发布时间:2021/3/9 16:28:00
--  怎么优化这段代码,执行效率很低

SQLxsmxFilter ="[t_rm_saleflow].[item_no] Like \'" & kh.Value & "%\'and [t_bd_branch_info].[branch_name] Like \'" & ck.Value & "%\'and [item_name] Like \'" & pl.Value & "%\'and [item_subname] Like \'" & pm.Value & "%\'"
SQLpdcydFilter  ="{t_bd_item_info}.[item_no] Like \'" & kh.Value & "%\'and [t_bd_branch_info].[branch_name] Like \'" & ck.Value & "%\'and [item_name] Like \'" & pl.Value & "%\'and [item_subname] Like \'" & pm.Value & "%\'"
SQLtyFilter ="{t_im_sheet_barcode_qty}.[item_no] Like \'" & kh.Value & "%\'and [branch_name] Like \'" & ck.Value & "%\'and [item_name] Like \'" & pl.Value & "%\'and [item_subname] Like \'" & pm.Value & "%\'"
Filter="款号 Like \'" & kh.Value & "%\' and 品类 Like \'*" & pl.Value & "\'and 品名 like \'*" & pm.Value & "\'and 仓库 like \'*" & ck.Value & "\'"

If jj.Text.Length>0 Then
    Filter = Filter & "and 季节 in (\'" & jj.text.replace(",", "\',\'") & "\')"
    SQLxsmxFilter = SQLxsmxFilter  & "and [item_clsname] in (\'" & jj.text.replace(",", "\',\'") & "\')"
    SQLpdcydFilter = SQLpdcydFilter & "and [item_clsname] in (\'" & jj.text.replace(",", "\',\'") & "\')"
    SQLtyFilter = SQLtyFilter & "and [item_clsname] in (\'" & jj.text.replace(",", "\',\'") & "\')"
End If

DataTables("库存调整入明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'oo\'and [db_no] = \'+\'"
DataTables("库存调整入明细").Load
DataTables("库存调整出明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'oo\'and [db_no] = \'-\'"
DataTables("库存调整出明细").Load
DataTables("采购退货单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'ro\'"
DataTables("采购退货单明细").Load
DataTables("采购收货单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'pi\'"
DataTables("采购收货单明细").Load
DataTables("直调出库单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'do\'"
DataTables("直调出库单明细").Load
DataTables("直调入库单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'do\'"
DataTables("直调入库单明细").Load
DataTables("销售明细").LoadFilter = SQLxsmxFilter
DataTables("销售明细").Load
DataTables("盘点差异单明细").LoadFilter = SQLpdcydFilter
DataTables("盘点差异单明细").Load


--  作者:有点蓝
--  发布时间:2021/3/9 16:44:00
--  
无法优化。表格得一个一个加载。
--  作者:zaq3574020
--  发布时间:2021/3/9 17:05:00
--  
那是可以使用其他的写法,完成这个逻辑吗
--  作者:zaq3574020
--  发布时间:2021/3/9 17:12:00
--  
我是加载完之后,然后使用GroupTableBuilder。是不是应该直接使用SQLGroupTableBuilder来执行。如果使用SQLGroupTableBuilder ,列名又不知道怎么处理
--  作者:有点蓝
--  发布时间:2021/3/9 17:45:00
--  
如果只是为了统计,直接统计就行了,没有必要加载什么查询表



--  作者:zaq3574020
--  发布时间:2021/3/10 8:34:00
--  

SQLxsmxFilter ="[t_rm_saleflow].[item_no] Like \'" & kh.Value & "%\'and [t_bd_branch_info].[branch_name] Like \'" & ck.Value & "%\'and [item_name] Like \'" & pl.Value & "%\'and [item_subname] Like \'" & pm.Value & "%\'"
SQLpdcydFilter  ="{t_bd_item_info}.[item_no] Like \'" & kh.Value & "%\'and [t_bd_branch_info].[branch_name] Like \'" & ck.Value & "%\'and [item_name] Like \'" & pl.Value & "%\'and [item_subname] Like \'" & pm.Value & "%\'"
SQLtyFilter ="{t_im_sheet_barcode_qty}.[item_no] Like \'" & kh.Value & "%\'and [branch_name] Like \'" & ck.Value & "%\'and [item_name] Like \'" & pl.Value & "%\'and [item_subname] Like \'" & pm.Value & "%\'"
Filter="款号 Like \'" & kh.Value & "%\' and 品类 Like \'*" & pl.Value & "\'and 品名 like \'*" & pm.Value & "\'and 仓库 like \'*" & ck.Value & "\'"

If jj.Text.Length>0 Then
    Filter = Filter & "and 季节 in (\'" & jj.text.replace(",", "\',\'") & "\')"
    SQLxsmxFilter = SQLxsmxFilter  & "and [item_clsname] in (\'" & jj.text.replace(",", "\',\'") & "\')"
    SQLpdcydFilter = SQLpdcydFilter & "and [item_clsname] in (\'" & jj.text.replace(",", "\',\'") & "\')"
    SQLtyFilter = SQLtyFilter & "and [item_clsname] in (\'" & jj.text.replace(",", "\',\'") & "\')"
End If

DataTables("库存调整入明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'oo\'and [db_no] = \'+\'"
DataTables("库存调整入明细").Load
DataTables("库存调整出明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'oo\'and [db_no] = \'-\'"
DataTables("库存调整出明细").Load
DataTables("采购退货单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'ro\'"
DataTables("采购退货单明细").Load
DataTables("采购收货单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'pi\'"
DataTables("采购收货单明细").Load
DataTables("直调出库单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'do\'"
DataTables("直调出库单明细").Load
DataTables("直调入库单明细").LoadFilter = SQLtyFilter & "and [t_im_sheet_barcode_qty].[trans_no] = \'do\'"
DataTables("直调入库单明细").Load
DataTables("销售明细").LoadFilter = SQLxsmxFilter
DataTables("销售明细").Load
DataTables("盘点差异单明细").LoadFilter = SQLpdcydFilter
DataTables("盘点差异单明细").Load

 

 

这个加载是主线程同步加载吗,为什么有时候一执行,程序就未响应了。然后等了10分钟也不会动。有时候又不会


--  作者:有点蓝
--  发布时间:2021/3/10 8:51:00
--  
默认都是主线程同步加载,再说DataTable也不支持异步加载。

如果加载的条件导致数据多,肯定就慢;如果还有表事件,以及表达式列计算,会更慢;如果是远程数据库还会更慢。

这么复杂的sql都搞出来了,如果加载数据不是为了编辑,而是做统计,还不如直接使用sql统计返回结果

--  作者:zaq3574020
--  发布时间:2021/3/10 10:27:00
--  
我看了一下加载出来的所有数据,也就是不到3W条,但是我等了大概5分钟
--  作者:有点蓝
--  发布时间:2021/3/10 11:05:00
--  
如果还有表事件,以及表达式列计算,会更慢;如果是远程数据库还会更慢。