很多问题
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编辑过]