MDB Access RecourdCount faux [Résolu]

Messages postés
21
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
9 juin 2019
-
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
Afficher la suite 

4 réponses

Messages postés
1882
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
9 juin 2019
60
0
Merci
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

Commenter la réponse de vb95
Messages postés
21
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
9 juin 2019
0
Merci
C'est fait. Je n'avais pas trouvé comment identifier du code. Je retiens !

Merci

Bonne soirée
vb95
Messages postés
1882
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
9 juin 2019
60 -
Ok merci
J'ai complété ma première réponse
Commenter la réponse de Notpa
Messages postés
21
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
9 juin 2019
0
Merci
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.
Commenter la réponse de Notpa
Messages postés
21
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
9 juin 2019
0
Merci
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
Commenter la réponse de Notpa