MDB Access RecourdCount faux

Résolu
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 - Modifié le 9 juin 2019 à 17:53
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Derniè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).

Des idées ?

Merci

Notpa

4 réponses

vb95 Messages postés 3417 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 20 mai 2023 165
Modifié le 9 juin 2019 à 18:00
Bonjour
Prière d'appliquer ceci en indentant ton code : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Le code n'en sera que plus lisible
Merci

Déjà après
tb.MoveFirst 
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 


A tester toi-même car je n'ai point VB 6

0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
9 juin 2019 à 17:54
C'est fait. Je n'avais pas trouvé comment identifier du code. Je retiens !

Merci

Bonne soirée
0
vb95 Messages postés 3417 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 20 mai 2023 165
9 juin 2019 à 18:01
Ok merci
J'ai complété ma première réponse
0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
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.

Va comprendre !

Merci encore et bonne soirée.
0
Notpa Messages postés 125 Date d'inscription dimanche 13 janvier 2019 Statut Membre Dernière intervention 8 janvier 2021 1
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.

Merci à ceux qui m'ont aidé et lu.

Cordialement

Notpa
0