Database 经典ASP-BOF

Database 经典ASP-BOF,database,asp-classic,vbscript,ado,resultset,Database,Asp Classic,Vbscript,Ado,Resultset,我正在尝试为一个记录集运行两个而不是循环。其中一个循环计算项目数,而另一个循环打印结果。我无法更改SQL查询,因此这是我剩下的计数方法 setPeopleCount = 0 While NOT rsSetContents.EOF setPeopleCount = setPeopleCount + 1 rsSetContents.MoveNext Wend While NOT rsSetContents.EOF Response.Write rs.Fields("exampleI

我正在尝试为一个记录集运行两个而不是循环。其中一个循环计算项目数,而另一个循环打印结果。我无法更改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
setPeopleCount=0
而不是rsSetContents.EOF
setPeopleCount=setPeopleCount+1
rsSetContents.MoveNext
温德
而不是rsSetContents.EOF
响应。写入rs.Fields(“exampleItem”)和“
” rsSetContents.MoveNext 温德
我的问题是运行两个循环。在第一个循环完成计数后,记录光标位于文件的末尾,因此当下一个循环需要运行时,它不会运行,因为EOF为true

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

您可以使用MoveFirst


你能不指望底部循环吗?或者将记录读取到对象数组中,然后您可以自由地在其上迭代任意次数

记录集上的
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 />"))
setPeopleCount=0
Dim exampleItems()
ReDim示例项(-1)
而不是rsSetContents.EOF
setPeopleCount=setPeopleCount+1
ReDim保留exampleItems(UBound(exampleItems)+1)
exampleItems(UBound(exampleItems))=rs(“exampleItem”)
rsSetContents.MoveNext
温德
'而不是循环,仅此:
Response.Write(连接(例如,“
”)项目)
为什么首先需要计数?为什么不在单独的语句(如SELECT count)中获取计数?或者甚至使用GETROWSH()并使用UWORD(GETWORSARDLE,2)来获得记录的计数。谢谢,考虑一下自己(7分钟的时间)。不幸的是,在第二个循环开始之前,我需要使用计数。我刚用了移动机器人,它成功了。无论如何谢谢你