Foxtable(狐表)用户栏目专家坐堂 → [求助] 优化代码


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

主题:[求助] 优化代码

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107813 积分:548416 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/22 15:57:00 [显示全部帖子]

很多问题

1、第一句代码就慢了,如果加载的数据多
2、判断是否有勾选,只需要判断有任何一个勾选即可,没有必要遍历一遍

方法1)、if tables("t_Purchasing").compute("count(FNeg)","FNeg=true") = 0
2)、if tables("t_Purchasing").findrow("FNeg=true") = -1
3)、if datatables("t_Purchasing").findrow("FNeg=true") is nothing 
4)、下面再说明

3、既然使用了for each,如果select没有结果的是不会进入循环的,所以完全没有必要做上面的判断,如果需要来个提示,还不如这样

dim drs as list(of datarow) = DataTables("t_Purchasing").Se lect("[FNeg] = True")
if drs.count = 0 then
msgbox(没有数据)
else
For Each rr As DataRow In drs
原来遍历的处理代码
next
end if

4、循环里面的2个Find条件都差不多,可以合并为一起,这样每次遍历都减少一次查询,大概如:
Dim dr As DataRow = DataTables("Pricelist").Find("FItemID1=" & rr("FItemID") & " and FUsed = true and FPrioritized = true and ((FStartQty<=" & rr("FAuxQty") &  " and FEndQty >= " & rr("FAuxQty") & ") or (FStartQty = 0 And FEndQty = 0 ))","FQuoteTime desc")

5、t_Supplier如果从字面理解没错的话是供应商表,这种数据一般不会太多也相对固定,建议全部加载查询,不要使用后台查询,后台查询肯定慢的,这个无解

6、PORequestEntry数据倒是一次性全部加载了,但是放的位置不对,放在循环里面,也就是说每循环一次就把这个表数据全部加载一次,假设t_Purchasing符合条件【[FNeg] = True】的行有100行PORequestEntry在上面代码里就重复整表数据的加载了100次,非常的酸爽........

既然数据都全部加载了,放到循环外面加载一次即可
[此贴子已经被作者于2020/8/22 15:58:06编辑过]

 回到顶部