2011-12-20 169 views
2

我想为记录集运行两个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为真。

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

+1

为什么你首先需要计数? – 2011-12-20 22:43:09

+0

为什么不像SELECT COUNT那样在单独的语句中获得计数?或者甚至使用GetRows()并使用UBound(GetRowsArray,2)来获取记录数。 – 2011-12-22 09:22:09

回答

1

你能不能在底部循环计数?或者可能将记录读入对象数组,然后您可以随意多次遍历它,只要您想要

+0

不幸的是,我需要在第二次循环开始之前使用计数。我刚刚使用rs.MoveFirst,它的工作。不管怎么说,还是要谢谢你 – TheCarver 2011-12-20 22:50:58

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 />"))