出于某种原因,当我过滤一个记录集然后启动Do While Not循环时,循环首先遍历记录,然后是奇数......
例如,下面的代码:
sql="SELECT * FROM ProcSaleQueue WHERE Num = '" & salegrouprs("Num") & "' AND Abbr = '" & salegrouprs("Abbr") & "' AND Item_Id = '" & salegrouprs("Item_Id") & "' AND Complete IS NULL ORDER BY ProcSaleId"
salesrs.Open sql, conn,3,3
salesrs.Filter="Complete = NULL"
salesrs.MoveFirst
Do While Not salesrs.EOF
msgbox salesrs("ProcSaleId")
'I do some processing things in here.
salesrs("Complete") = 1
salesrs.MoveNext
Loop
将输出
72 74 73 75
而不是
72 73 74 75
但是当我删除时:
salesrs.Filter="Complete = NULL"
输出正常。我使用.Filter而不是再次查询,因为我必须多次循环遍历此记录集并且它是一个庞大的集合所以我不希望SQL服务器点击太多。有什么想法吗?
答案 0 :(得分:0)
通过将complete设置为1,记录不再在过滤器的范围内,因此您将在下一条记录中。尝试删除salesrs.MoveNext
否则将所有过滤器放在一起并检查是否完成
if salesrs("Complete") = 1 then
salesrs.MoveNext
else
'do your stuff
salesrs("Complete") = 1
end if
答案 1 :(得分:0)
您的.Filter()
没有意义,因为您已经只选择了SQL本身中该字段为NULL的记录。
如果您想要放弃已处理的数据,可以使用本地数组,例如存储ProcSaleId
你可以拥有:
Dim arrProcessedProcSaleId()
ReDim arrProcessedProcSaleId(-1)
Do While Not salesrs.EOF
curProcSaleId = salesrs("ProcSaleId")
msgbox curProcSaleId
For x=0 To Ubound(arrProcessedProcSaleId)
'Here arrProcessedProcSaleId(x) contains value of already processed ProcSaleId
Next
'I do some processing things in here.
'store value for later use:
ReDim Preserve arrProcessedProcSaleId(UBound(arrProcessedProcSaleId) + 1)
arrProcessedProcSaleId(UBound(arrProcessedProcSaleId)) = curProcSaleId
salesrs.MoveNext
Loop
salesrs.Close
Erase arrProcessedProcSaleId
你可以拥有任意数量的数组,如果你有很多记录,确保在完成释放用于动态数组的内存时有Erase
行。