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   -
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

  1. blux Messages postés 5032 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    il faut utiliser la méthode 1, mais avec une astuce, faire un .movelast avant de demander le .recordcount.
    0
  2. artis31 Messages postés 49 Statut Membre 1
     
    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
    1. blux Messages postés 5032 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Je ne t'ai pas demandé de faire ça.

      Essaye ceci (et uniquement ceci) :

      set rst = .....
      rst.movefirst
      rst.movelast
      msgbox rst.recordcount
      0
  3. artis31 Messages postés 49 Statut Membre 1
     
    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
    1. blux Messages postés 5032 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      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