【问题标题】:Classic ASP - BOF经典 ASP - BOF
【发布时间】:2012-01-24 20:35:00
【问题描述】:

我正在尝试为记录集运行两个 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 为真。

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

【问题讨论】:

  • 为什么要先计数?
  • 你为什么不在像 SELECT COUNT 这样的单独语句中得到计数?或者甚至使用 GetRows() 并使用 UBound(GetRowsArray,2) 来获取记录数。

标签: database asp-classic vbscript ado resultset


【解决方案1】:

【讨论】:

  • 谢谢,考虑一下自己(当 7 分钟结束时)
【解决方案2】:

你不能指望底部循环吗?或者也许将记录读入对象数组,然后您可以随意迭代它多次

【讨论】:

  • 很遗憾没有,我需要在第二个循环开始之前使用计数。我刚刚使用了 rs.MoveFirst,它起作用了。还是谢谢
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2013-05-17
    相关资源
    最近更新 更多