[VB6] Nbre d'enregistrements dans un Recordset

Nbre d'enregistrements dans un Recordset [VB6] - VB/VBA/VBS - Programmation

Marsh Posté le 20-01-2005 à 16:11:11    

Salut à tous.
 
Je suis en train d'halluciner  :pt1cable:  
J'interroge une base Access avec une requète SQL.  
Je colle le résultat du Select dans un Recordset.
Et quand je demande le nbre d'enregistrements, j'obtient des trucs à se taper la tête contre les murs :
 
rstMonRecordSet.MaxRecords = 0
rstMonRecordSet.RecordCount = -1
 
Je me dis, y a un soucis : ma requete ramene une sélection vide.
Et bien non !
Je peux écrire les données du Recordset dans un .txt, et il y a bien des données dedans !
 
Vous avez une idée ?
Pourquoi ce pbe ?
Comment récupérer le nbre d'enregistrements ?
 
Merci de votre aide
 
Laurent

Reply

Marsh Posté le 20-01-2005 à 16:11:11   

Reply

Marsh Posté le 20-01-2005 à 16:27:51    

bienvenu dans le monde ADO...
 
avec Access, ton pb, est tt a fait normal, comme avec toute autre base de donnée en mode "client ADO".
 
Avec access, aucun moyen de passer ta connection en mode "server" donc, pour recuperer le nombre d'enreg, tu fais un "select count(...)" AVANT ta requete
 

Reply

Marsh Posté le 20-01-2005 à 17:00:33    

Génial !
 
:-(((
 
merci de ton aide.

Reply

Marsh Posté le 24-01-2005 à 14:45:13    

Autre méthode que le COUNT (parceque c'est pas terrible) :
 

Code :
  1. Dim cpt as Integer
  2. cpt = 0
  3. ' On teste que la requête n'est pas vide
  4. If Not (rs.BOF and rs.EOF) Then
  5.    ' On retourne la première ligne du rs.
  6.    rs.MoveFirst
  7.    ' On parcours le rs d'un bout à l'autre
  8.    Do While Not rs.EOF
  9.       ' Hop, on a trouvé une ligne
  10.       cpt = cpt + 1
  11.    Loop
  12.    ' On retourne à la première ligne
  13.    rs.MoveFirst
  14. End


 
Ce système est mieu qu'un "count()", parceque :
1) Ca t'évite de faire une requête supplémentaire (ce qu'il y a de plus coûteux)
2) Da toute façon, ton RS tu vas devoir le parcourir, donc dans tous les cas, il faudra bien le charger en mémoire à un moment où à un autre.
 
Ce système est mieu, uniquement si le nombre de lignes est limité, et leur taille limitée.
Evidement, si t'as des champs de type "text" et un grand nombre de lignes ( > 100 000) ce sytème sera peut-être plus lent qu'un count(), mais en règle générale, il est mieu.

Reply

Marsh Posté le 24-01-2005 à 16:19:46    

Arjuna a écrit :

Autre méthode que le COUNT (parceque c'est pas terrible) :
 

Code :
  1. Dim cpt as Integer
  2. cpt = 0
  3. ' On teste que la requête n'est pas vide
  4. If Not (rs.BOF and rs.EOF) Then
  5.    ' On retourne la première ligne du rs.
  6.    rs.MoveFirst
  7.    ' On parcours le rs d'un bout à l'autre
  8.    Do While Not rs.EOF
  9.       ' Hop, on a trouvé une ligne
  10.       cpt = cpt + 1
  11.    Loop
  12.    ' On retourne à la première ligne
  13.    rs.MoveFirst
  14. End


 
Ce système est mieu qu'un "count()", parceque :
1) Ca t'évite de faire une requête supplémentaire (ce qu'il y a de plus coûteux)
2) Da toute façon, ton RS tu vas devoir le parcourir, donc dans tous les cas, il faudra bien le charger en mémoire à un moment où à un autre.
 
Ce système est mieu, uniquement si le nombre de lignes est limité, et leur taille limitée.
Evidement, si t'as des champs de type "text" et un grand nombre de lignes ( > 100 000) ce sytème sera peut-être plus lent qu'un count(), mais en règle générale, il est mieu.


 
Et il faut egalement préciser que cela ne fonctionne pas si la connec ADO est en forward only ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed