2010-09-30 30 views
2

je voudrais quelque chose comme ça:Comment définir plus une condition en temps

While Not RdoRst.EOF And RdoRst(2) = "Foo" 
     cboComboBox.AddItem RdoRst(1) 
     cboComboBox.ItemData(cboComboBox.NewIndex) = RdoRst(0) 
     RdoRst.MoveNext 
Wend 

Je veux que l'expression 1 (Non RdoRst.EOF) est évalué en premier. Alors si elle retourne vrai, l'expression 2 est aussi évaluée (RdoRst (2) = "Foo"). Si l'expression 1 renvoie false, l'expression 2 n'est pas évaluée.

Cordialement,

Florian

+0

Toujours utiliser 'Do ... Loop' au lieu de' While ... Wend'. 'Do' boucles peuvent être quitter avec' Exit Do 'qui résoudra votre cas le plus facilement. – wqw

Répondre

1

AndAlso n'est pas disponible dans VB6. Essayez cette

Do 
    If RdoRst.EOF Then Exit Do 
    If Not RdoRst(2) ="Foo" Then Exit Do  
    cboComboBox.AddItem RdoRst(1) 
    cboComboBox.ItemData(cboComboBox.NewIndex) = RdoRst(0) 
    RdoRst.MoveNext 
Loop 
0
While Not RdoRst.EOF 
    If RdoRst(2) = "Foo" Then 
     cboComboBox.AddItem RdoRst(1) 
     cboComboBox.ItemData(cboComboBox.NewIndex) = RdoRst(0) 
    Else 
     Exit Wend 
    End If 
    RdoRst.MoveNext 
Wend 
+0

Bonne idée, mais votre code ne se comporte-t-il pas différemment du code de la question? Le code dans la question arrête de boucler immédiatement lorsqu'une valeur non-Foo est trouvée. Votre code continue à boucler dans l'espoir de trouver un autre Foo. – MarkJ

+0

Vous avez raison, j'aurais dû mettre ELSE Exit Wend –

0

La question a trait à l'évaluation 'court circuit' des expressions de condition. Eh bien, VB6 ne supporte pas cette fonctionnalité. Je sais que c'est stupide.