以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 盘点核销代码优化 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=125272) |
-- 作者:weibu -- 发布时间:2018/9/25 10:58:00 -- 盘点核销代码优化 以下是我这边盘点核销的部分代码逻辑。盘点单据的数据量 上万行;syms中符合条件的数据也有几万行。 这样我再执行下列代码是速度非常非常慢。请问有无优化 方案? pd = DataTables("盘点单据").SQLFind("[盘点部门] = \'" & yh("所属部门") & "\'and [盘点单号] = \'" & txt & "\'") \'找出本次盘点单据的盘点数据 DataTables("盘点单据").SQLReplaceFor("审核人", dr("姓名"), "[盘点部门] = \'" & yh("所属部门") & "\'and [盘点单号] = \'" & txt & "\'") DataTables("盘点单据").SQLReplaceFor("审核日期", Date.Now, "[盘点部门] = \'" & yh("所属部门") & "\'and [盘点单号] = \'" & txt & "\'") Dim syms As List(of DataRow) = DataTables("溯源码").SQLSelect("当前所在部门 = \'" & yh("所属部门") & "\' And 是否可用 = 1") \'找到本部门可用溯源码的行 For Each sym As DataRow In syms fr = DataTables("盘点单据").SQLFind("[溯源码] = \'" & sym("子溯源码") & "\'") \'溯源码表中的溯源码是否存在与盘点单据 If fr IsNot Nothing Then sym("是否可用") = 1 Else Dim wb As Row = Tables("外部出库").AddNew() sym("是否可用") = 0 wb("溯源码" ) = sym("子溯源码") wb("出库部门") = sym("当前所在部门") wb("出库时间") = Date.Now wb("单据类型") = "销售单" wb("是否拆箱") = sym("是否拆箱") wb("出库人") = yh("姓名") wb("核销人") = dr("姓名") End If Next |
-- 作者:有点甜 -- 发布时间:2018/9/25 11:57:00 -- 一般是这个代码慢
For Each sym As DataRow In syms
fr = DataTables("盘点单据").SQLFind("[溯源码] = \'" & sym("子溯源码") & "\'") \'溯源码表中的溯源码是否存在与盘点单据
每执行一次sqlFind,耗时一般是0.5秒,要耗时多少,你可以自己测算。
一般如果syms较多的情况下,都是把表【盘点单据】的数据全部加载出来,然后用find的。
|