2016-08-18 71 views
0

我正在处理一个应用程序,出于某种原因,我有一个理解问题的问题。我有一些代码看起来是这样的....对于下一个循环继续每个如果在极限

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,然后进入到下一个,它应该简单地退出循环 - 但似乎要回去即使没有记录,也可以回到循环的顶部。任何人都知道为什么会发生这种情况?

+1

是因为标题?这可能是由于头部是记录集的一部分 –

+4

如果您只想循环播放记录,那么最好使用'Do While Not rs.EOF'而不是依赖RecordCount属性(它是并不总是可靠的) –

+1

@TimWilliams出于某种原因,我似乎只记得当记录集没有行时检查'EOF'时抛出一个错误。我偏执也检查“BOF”? –

回答

3

RecordCount返回已被读取的记录数或类似的东西 - 它不会返回记录总数,直到记录集迭代后才能知道该值。

因此,For...Next循环无法有效地迭代记录集。

尝试While循环,而不是:

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

调用'RecordCount' *应该返回记录总数,但是它将光标留在记录集的末尾,所以如果你想读取记录,你需要先调用'MoveFirst'(你需要使用正确的光标类型在第一个地方......) –

+2

呃,我使用的唯一记录集是什么'Command.Execute'返回给我(这是只向前,不是吗?) –

1

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

此外,VB不会每次检查循环限制循环。它只在开始时检查它。即使Number的值已更改,以下代码仍将打印100次:

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

谢谢,这是有帮助的! – BobSki