2016-08-18 53 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