[VBA] Utilisation de DAO.recordset
Bonjour à tous,
Mon problème se trouve à cette ligne
Code:
1 2 3
| Dim statistiques as DAO.recordset
If (statistiques.EOF Or numeroStat <> Nz(statistiques("numeroSTATISTIQUE"))) Then |
Si la requete est vide, il fait un bug!!! Il n'est pas égale a null il plante tout simplement, comment éviter cela. Le NZ ne fonctionne pas!! :(
Mary
Re: [VBA] Utilisation de DAO.recordset
Bonjour le Québec (ça fait toujours plaisir :wink: ),
Citation:
Envoyé par kissmytoe
Si la requete est vide, il fait un bug!!! Il n'est pas égale a null il plante tout simplement, comment éviter cela. Le NZ ne fonctionne pas!! :(
A mon avis, il s'agit plutôt d'une conséquence de l'implémentation des opérateurs logiques dans VB (Or, And...).
Tu peux réécrire ta fonction comme suit:
Code:
1 2 3 4 5 6 7
| Dim statistiques as DAO.recordset
If statistiques.EOF Then
' RecordSet vide, donc pas de statistiques
ElseIf numeroStat <> Nz(statistiques("numeroSTATISTIQUE"))) Then
' Ici, on est sûr que le RecordSet n'est pas vide
EndIf |
Explication:
Dans le cas du Or, quand la partie gauche de l'expression est évaluée à Vrai, et que donc le résultat est Vrai, alors VB évalue quand même la partie droite :!: , ce qui ne sert à rien et peut même causer une erreur :x .
La preuve par l'exemple:
Dans un module de code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Public Sub TestLogiqueOR()
If TestLogiqueExpr(True, "Gauche") Or TestLogiqueExpr(True, "Droite") Then
Debug.Print " TestLogiqueOR=" & True
Else
Debug.Print " TestLogiqueOR=" & False
End If
End Sub
Public Sub TestLogiqueAND()
If TestLogiqueExpr(False, "Gauche") And TestLogiqueExpr(True, "Droite") Then
Debug.Print " TestLogiqueAND=" & True
Else
Debug.Print " TestLogiqueAND=" & False
End If
End Sub
Public Function TestLogiqueExpr(bValeur As Boolean, sLibellé) As Boolean
Debug.Print " ."; sLibellé; ":TestLogiqueExpr="; bValeur
TestLogiqueExpr = bValeur
End Function |
Dans la fenêtre de débogage:
Taper: TestLogiqueOR
Citation:
Envoyé par Résultat
.Gauche:TestLogiqueExpr=Vrai
.Droite:TestLogiqueExpr=Vrai
TestLogiqueOR=Vrai
Taper: TestLogiqueAND
Citation:
Envoyé par Résultat
.Gauche:TestLogiqueExpr=Faux
.Droite:TestLogiqueExpr=Vrai
TestLogiqueAND=Faux