经典ASP - BOF

时间:2011-12-20 22:41:39

标签: database asp-classic vbscript ado resultset

我正在尝试为记录集运行两个WHILE NOT循环。其中一个循环计算项目数,而另一个循环计算结果。我不能改变SQL查询,所以这是我留下的计数方法。

setPeopleCount = 0
While NOT rsSetContents.EOF
    setPeopleCount = setPeopleCount + 1
rsSetContents.MoveNext
Wend

While NOT rsSetContents.EOF
    Response.Write rs.Fields("exampleItem")&"<br>"
rsSetContents.MoveNext
Wend

我的问题是运行两个循环。在第一个循环完成计数后,记录光标位于文件的末尾,因此当下一个循环需要运行时 - 它不会因为EOF为真。

如何将光标重置回文件的开头,以便第二个循环可以运行?

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

你能不指望底部循环?或者也许将记录读入对象数组,然后您可以根据需要自由迭代它

答案 2 :(得分:0)

MoveFirst需要在记录集上使用正确的光标 - 例如,如果您将更改为其他数据库,则默认光标可能会更改,代码可能会失败。

我建议您在计数时存储值,从而保存第二个循环:

setPeopleCount = 0
Dim exampleItems()
ReDim exampleItems(-1)
While NOT rsSetContents.EOF
    setPeopleCount = setPeopleCount + 1
    ReDim Preserve exampleItems(UBound(exampleItems) + 1)
    exampleItems(UBound(exampleItems)) = rs("exampleItem")
    rsSetContents.MoveNext
Wend

'instead of a loop, just this:
Response.Write(Join(exampleItems, "<br />"))