Notpa
Messages postés125Date d'inscriptiondimanche 13 janvier 2019StatutMembreDernière intervention 8 janvier 2021
-
Modifié le 9 juin 2019 à 17:53
Notpa
Messages postés125Date d'inscriptiondimanche 13 janvier 2019StatutMembreDernière intervention 8 janvier 2021
-
9 juin 2019 à 22:50
Bonjour,
J'ai codé le petit programme suivant :
Private Sub Form_Load()
Dim db As Database
Dim tb As Recordset
Dim cpt As Integer
Set db = OpenDatabase(App.Path & "\rébus.mdb")
Set tb = db.OpenRecordset("kissé")
'
Debug.Print "recrorcount = " & tb.RecordCount
tb.MoveFirst
cpt = 0
Do Until tb.EOF
cpt = cpt + 1
tb.MoveNext
Loop
Debug.Print "records comptés = " & cpt
db.Close
End Sub
Dans la fenêtre Débug, j'ai les messages suivants:
recrorcount = 286 records comptés = 288
Pour le moment, j'utilise la boucle pour avoir le bon nombre d'enregistrements (288 est le vrai nombre). Mais j'aimerai bien comprendre pourquoi le RecordCount est faux. Notez que la MDB a 4 tables, 2 ont le bon RecordCount, les 2 autres sont faux.
J'ai fait une réparation de la base de données. Ça n'a rien changé. Rien de trouvé de similaire sur le Net (FR et US).
cpt devrait être = à 1 vu que c'est le premier enregistrement
Ensuite je pense qu'il y a un souci dans la boucle do .... Loop
Lorsque tu arrives au dernier enregistrement avec
Do Until tb.EOF
tu n'as pas compté le dernier enregistrement vu qu'on sort direct de la boucle
La boucle correcte serait celle-ci en testant si on est à la fin des enregistrements après avoir augmenté le nombre d'enregistrements de 1 ( pour prendre en compte l'enregistrement courant)
Do
tb.MoveNext
cpt = cpt + 1
if tb.EOF then Exit Do
Loop
Notpa
Messages postés125Date d'inscriptiondimanche 13 janvier 2019StatutMembreDernière intervention 8 janvier 20211 9 juin 2019 à 19:53
Merci de répondre vb96,
J'ai testé avec +1 dans ma boucle. En effet, ça semble logique. Mais le RecordCount est maintenant à 287 alors que la table a 288 entrées.
Ma MDB contient 4 tables. La première, celle ci-dessus, donne 287 vs 288, la deuxième 230 vs 230, la troisième 35 vs 35 et la quatrième 14 vs 13. Les RecordCount 2 et 3 sont corrects, pour le 1, manque 1, pour le 4, un de trop.
Notpa
Messages postés125Date d'inscriptiondimanche 13 janvier 2019StatutMembreDernière intervention 8 janvier 20211 9 juin 2019 à 22:50
Bonne nouvelle ! J'ai résolu le problème.
A l'aide du gestionnaire de données (mode développement), j'ai créé une nouvelle base de données. Puis j'ai importé les tables une par une (on ne peut pas faire autrement) de l'ancienne MDB dans la nouvelle. Tout s'est bien passé. J'ai alors passé mon programme avec en entrée cette nouvelle MDB. Et là : miracle ! Tous les RecordCount sont corrects !
Le problème était donc dans la MDB qui avait quelque chose de cassé. Mon programme n'est pas en cause.
Petite remarque : ne pas faire +1 sur le RecordCount. Les nombres obtenus à l'EOF sont corrects.