Compter le nombre enregistrement recordset

Résolu/Fermé
artis31 Messages postés 42 Date d'inscription vendredi 9 mai 2008 Statut Membre Dernière intervention 8 décembre 2012 - Modifié par artis31 le 20/06/2011 à 17:43
blux Messages postés 26583 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 9 janvier 2025 - 20 juin 2011 à 17:52
Bonjour à la communauté,

Je cherche à connaitre le nombre d'enregistrements retournés dans un recordset par une requête sql.

Voici les deux codes essayés :

Rsql = "SELECT TOP 10 * FROM " & TableBDD & ";"
(Dans ma requête j'ai volontairement limité le nombre d'enregistrements à 10 pour le test.)

Méthode 1:
NbRecord = Rst.RecordCount
MsgBox ("Nbre d'enregistrements = " & NbRecord)

Méthode 2:
NbreLignes = 0
Do While Not Rst.EOF
NbreLignes = NbreLignes + 1
Rst.MoveNext
Loop
MsgBox ("Nbre d'enregistrements = " & NbreLignes)
Rst.MoveFirst


La méthode 1 me renvoie la valeur -1

La méthode 2 me renvoie bien la valeur 10, mais est très longue... quelques secondes avec 10 enregistrements j'ose pas imaginer avec 50.000...

Quelle solution pour compter rapidement ce nombre d'enregistrement ?

3 réponses

blux Messages postés 26583 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 9 janvier 2025 3 323
20 juin 2011 à 16:04
Salut,

il faut utiliser la méthode 1, mais avec une astuce, faire un .movelast avant de demander le .recordcount.
0
artis31 Messages postés 42 Date d'inscription vendredi 9 mai 2008 Statut Membre Dernière intervention 8 décembre 2012 1
20 juin 2011 à 17:31
Bonjour et merci pour ta réponse, j'ai testé mais toujours le même résultat : .RecordCount = -1

Voici le bout de code modifié pour la méthode 1 :
If Not Rst.EOF Then
Rst.MoveLast
NbRecord = Rst.RecordCount
MsgBox ("Nbre d'enregistrements = " & NbRecord)
Rst.MoveFirst
Else
MsgBox ("Aucun enregistrement trouvé.")
End If

Nota : J'ai bien 10 enregistrements qui s'affichent lorsque je fais ".CopyFromRecordset Rst" ce n'est donc pas un problème de requête ou de données.
0
blux Messages postés 26583 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 9 janvier 2025 3 323
20 juin 2011 à 17:33
Je ne t'ai pas demandé de faire ça.

Essaye ceci (et uniquement ceci) :

set rst = .....
rst.movefirst
rst.movelast
msgbox rst.recordcount
0
artis31 Messages postés 42 Date d'inscription vendredi 9 mai 2008 Statut Membre Dernière intervention 8 décembre 2012 1
20 juin 2011 à 17:42
Bonsoir,

J'ai fais exactement ce que tu m'as demandé. Tester la présence ou non d'enregistrements ne change rien à l'affaire, juste à rassurer qu'il y a bien des enregistrements. Et ajouter rst.movefirst ne fonctionne pas.

J'ai trouvé la solution, il faut ajouter dans mon code la ligne Rst.CursorLocation = adUseClient

Merci pour ton aide qui m'a mis sur la voie de la solution :o)
Thierry
0
blux Messages postés 26583 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 9 janvier 2025 3 323
20 juin 2011 à 17:52
Et ajouter rst.movefirst ne fonctionne pas.
Je pourrais voir ce que tu as mis, comme code, car je suis surpris qu'un movefirst ne marche pas.

Et le cursorlocation demande à access de gérer un curseur sql côté client plutôt que côté serveur...

Tes données sont où : sur un serveur, sur ton poste, tables liées, odbc ?
0