RecordCount. [URGENT]

Signaler
Messages postés
21
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
25 novembre 2004
-
Messages postés
13
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
16 mars 2006
-
Bonjour,
J'ai un problème d'utiliser le RecordCount. Je veux savoir des nombres d'enregistrement dans la base. Normalement c'est just rs.RecordCount. Mais là, ca me ramène toujours -1. (rs , j'ai déclaré comme le recordset).
Merci d'avance.

8 réponses

Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
En fonction du type de recorset que tu ramènes, le nombre de recordset peut ne pas être évalué lors de l'exécution de ta requête.

Solution 1 : tu fais un .MoveLast sur ton recordset avant ton .RecordCount

Solution 2 : tu utilises des requêtes SELECT COUNT au lieu de simples SELECT
Messages postés
21
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
25 novembre 2004

Bonjour,
Je ne comprends pas trop comment ca marche enfait.
Je te donne le code :

Dim sql1 As String
Dim sql2 As String

Dim rs1 As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset

sql1 = "select count(*) from T_FIL"
rs1.Open sql1, CODB, adOpenForwardOnly, adLockReadOnly, -1

sql2 = " select count(*) from T_Traduction " & _
" where CD_LANGUE = 'ENG'" & _
" and TBLE = 'T_FIL'"
rs2.Open sql2, CODB, adOpenForwardOnly, adLockReadOnly, -1

Comment peux-je coder après? Enfait, je voudrais comparer si les nombre d'enregistrement dans rs1 est égale les nombres d'enregistrement dans rs2... Genre :
if rs1.recordcount = rs2.recordcount then
.....
end if
merci.
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
Je te mets la doc :

Propriété RecordCount

Indique le nombre actuel d'enregistrements dans un objet Recordset.

Valeur de retour

Renvoie une valeur de type Long.

Remarques

Vous utilisez la propriété RecordCount pour connaître le nombre d'enregistrements contenus dans un objet Recordset. La propriété renvoie la valeur -1 lorsqu'ADO ne peut pas déterminer le nombre d'enregistrements ou si le fournisseur ou le type de curseur ne peuvent pas prendre en charge RecordCount. La lecture de la propriété RecordCount alors que le Recordset est fermé génère un message d'erreur.

Si l'objet Recordset accepte le positionnement approximatif, ou les signets, c'est-à-dire que respectivement Supports (adApproxPosition) ou Supports (adBookmark) renvoie la valeur True, cette valeur sera le nombre exact d'enregistrements du Recordset qu'il soit complet ou non. Si l'objet Recordset n'accepte pas le positionnement approximatif, cette propriété peut peser lourdement sur les ressources sachant que tous les enregistrements devront être extraits et comptés pour qu'une valeur RecordCount exacte puisse être renvoyée.

Du type de curseur de l'objet Recordset dépend si le nombre d'enregistrements peut être déterminé. La propriété RecordCount renvoie -1 pour un curseur vers l'avant seulement, le compte effectif pour un curseur statique ou entré par clavier, et soit -1 ou le compte effectif, selon la source des données, pour un curseur dynamique.

Le dernier paragraphe te dit pourquoi tu reçois -1.
De plus je vois que tes requêtes renvoient déjà une valeur de compte, donc 1 seule ligne.

Tu peux donc mettre en requête

sql1 = "select count(*) AS NBLIGNE1 from T_FIL"
sql2 = "select count(*) AS NBLIGNE2 from T_Traduction " & _
" where CD_LANGUE = 'ENG'" & _
" and TBLE = 'T_FIL'"


Dans la suite de ton compte, tu peux comparer

if oRs1![NBLIGNE1] = oRs2![NBLIGNE2]


Autre solution

sql1 = "select * from T_FIL"
sql2 = "select * from T_Traduction " & _
" where CD_LANGUE = 'ENG'" & _
" and TBLE = 'T_FIL'"


Tu ouvres tes recordsets comme suit :
oRs1.Open sql1, CODB, adOpenSnapshot, adLockReadOnly, -1
rs1.MoveLast


Dans la suite de ton compte, tu peux comparer
if oRs1.RecordCount = oRs2.RecordCount
Messages postés
106
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
22 mai 2004

je sais que c'est bizarre mais j'ai deja eu ce probleme que j'ai regle avec un "order by ..." dans la requete sql

essai pour voir on sais jamais

stacco :o)
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
Le Order By oblige le moteur de base de données à évaluer complètement la requête, ne serait-ce que pour pouvoir la trier.
C'est le principe de l'instruction .MoveLast dans mes solutions qui oblige à aller à la fin du curseur, donc à finir d'évaluer la requête.
Messages postés
21
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
25 novembre 2004

Bonjour,
Bravo pour tes 2 facons du RecordSet. Ca marche super bien. Just une petite chose que quand j'ouvre la connection du recordset : alors..un paramètre de la fonction ----->
oRs1.Open sql1, CODB, adOpenSnapshot, adLockReadOnly, -1

(adOpenSnapShot, ce n'est pas dans le choix) Cad, il faut que j'utilise un autre...c'est à dire :adKeyset)

En tout cas.. MERCI BCP! BRAVO!!
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
J'ai peut-être confondu les constantes ADO et DAO ... mais tu as compris le principe, c'est l'essenciel ;)
Messages postés
13
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
16 mars 2006

Je remercie, à mon tour PhilippeE pour sa breve explication de la source prob. alors de cette façon, on prend les suggestions avec une confiance au resultat de notre code, même à Long Terme ;-)