【问题标题】:For Next loops continues every if at limitFor Next 循环继续每个如果在限制
【发布时间】:2016-08-18 18:37:44
【问题描述】:

我正在开发一个应用程序,但由于某种原因,我在理解某些内容时遇到了问题。我的代码看起来像这样......

dim number as integer



number = rs.recordcount (only 1 record - so number = 1)
for x = 1 to Number
'stuff
'stuff
    rs.moveNext
Next 

我假设一旦它到达 rs.movenext 然后进入 Next,它应该简单地退出循环 - 但它似乎回到循环的顶部,即使没有记录。有人知道为什么会这样吗?

【问题讨论】:

  • 是因为标题吗?这可能是由于标头是记录集的一部分
  • 如果您只想循环遍历记录,那么最好使用Do While Not rs.EOF 而不是依赖 RecordCount 属性(这并不总是可靠的)
  • @TimWilliams 出于某种原因,我似乎记得只在记录集没有行时检查EOF 抛出错误。我是否也偏执地检查BOF
  • 我只检查过 EOF:我从来没有遇到过与 BOF 相关的问题,但我几乎只打开一个记录集并阅读记录——我不会来回跳转.

标签: vb.net vba for-loop


【解决方案1】:

RecordCount 返回已读取的记录数,或类似的东西 - 它不返回记录总数,该值在记录集被迭代之前是未知的.

所以For...Next 循环不能有效地迭代记录集。

改用While 循环:

While Not rs.BOF And Not rs.EOF
    'stuff
    rs.MoveNext
Wend

【讨论】:

  • 调用RecordCount应该返回记录的总数,但是它会将光标留在记录集的末尾,所以如果你想读取你需要的记录首先调用MoveFirst(并且您首先需要使用正确类型的光标...)
  • 嗯,我使用的唯一记录集是 Command.Execute 返回给我的任何内容(那是只转发,不是吗?)
【解决方案2】:

你的循环没有终止的主要原因是你没有给它任何会导致它终止的条件。

另外,VB 不会在每次循环时检查循环限制。它只在开始时检查它。即使Number 的值发生了变化,以下代码仍会打印 100 次:

Dim Number As Integer = 100
For x As Integer = 0 To Number
    Console.WriteLine(x)
    Number = 99
Next

【讨论】:

  • 谢谢,这很有帮助!
猜你喜欢
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多