Compter le nombre enregistrement recordset
Résolu
artis31
Messages postés
49
Statut
Membre
-
blux Messages postés 5032 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 5032 Date d'inscription Statut Modérateur Dernière intervention -
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 ?
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
-
Salut,
il faut utiliser la méthode 1, mais avec une astuce, faire un .movelast avant de demander le .recordcount.
-
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. -
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-
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 ?
-