2015-07-13 150 views
0

今天早上我在測試我的ms-Access數據庫時遇到了一個有趣的問題。我嘗試將一個recordsetRsOuter)中的每個值與另一個recordsetRsInner)進行比較。我是這樣做的,如果找到匹配的record,它會使用Exit do轉義RsInner循環。這是因爲一旦找到匹配記錄,就不需要遍歷其餘的記錄。`Exit do`同時在兩個循環中嵌套循環跳轉

Do while not RsOuter.EOF  
     Do While Not RsInner.EOF 
      If MatchFound Then 
       'do Something 
       Exit do ' this escapes both while loops, instead of one 
      End If 

      RsInner.MoveNext 
     Loop 
     RsInner.MoveFirst 
     RsOuter.MoveNext 
Loop 

有沒有辦法讓它退出僅環中的一個(在這種情況下,只有RsInner)?

+0

行「RsOuter」本身就是一個錯誤 - 它沒有任何意義,它的命令RsOuter所有由它自己可能不應該編譯。您想要進行調試編譯並修復語法錯誤。 –

回答

2

你誤認爲Exit Do突破了嵌套Do循環中的兩個級別。考慮以下幾點:

Sub test() 
    Dim i As Long, j As Long 

    Do While i < 2 
     Do While j < 2 
      Debug.Print "In inner loop" 
      If True Then Exit Do 
      j = j + 1 
      Debug.Print "This shouldn't be printed" 
     Loop 
     Debug.Print "In outer loop" 
     i = i + 1 
    Loop 
    Debug.Print "Out of the loops" 
End Sub 

輸出是:

In inner loop 
In outer loop 
In inner loop 
In outer loop 
Out of the loops 

如果你說的是真的,「在外環」不應打印。您的代碼正在發生其他事情。聽起來就像你退出內循環與外環的條件虛假

+0

想通了,我的選擇語句只選擇一定範圍的日期,而它應該選擇所有的東西啊!謝謝! –