经典的ASP - BOF
问题描述:
我想为记录集运行两个WHILE NOT循环。其中一个循环计算项目的数量,另一个则打印结果。我无法改变SQL查询,所以这是我留下的计数方法。经典的ASP - BOF
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为真。
如何将光标重置回文件的开头,以便第二个循环可以运行?
答
你能不能在底部循环计数?或者可能将记录读入对象数组,然后您可以随意多次遍历它,只要您想要
+0
不幸的是,我需要在第二次循环开始之前使用计数。我刚刚使用rs.MoveFirst,它的工作。不管怎么说,还是要谢谢你 – TheCarver 2011-12-20 22:50:58
答
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 />"))
为什么你首先需要计数? – 2011-12-20 22:43:09
为什么不像SELECT COUNT那样在单独的语句中获得计数?或者甚至使用GetRows()并使用UBound(GetRowsArray,2)来获取记录数。 – 2011-12-22 09:22:09