过滤的ADO记录集Do While Not not not order

时间:2013-04-26 17:03:38

标签: asp-classic vbscript recordset

出于某种原因,当我过滤一个记录集然后启动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服务器点击太多。有什么想法吗?

2 个答案:

答案 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行。