2015-07-13 118 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

想通了,我的选择语句只选择一定范围的日期,而它应该选择所有的东西啊!谢谢! –