OVH Cloud OVH Cloud

Nbre d'enregistrement

4 réponses
Avatar
Laurent
salut =E0 tous.

dans un formulaire, je contruit une requete contenu dans=20
la variable SQLREQ. J'utilise un recordset (temporaire)=20
pour la r=E9aliser et la place ensuite dans une zone de=20
liste, plac=E9e sur le formulaire "RESULTATS".

cf le code suivant :

'Ouverture d'une requ=E8te pour stockage des r=E9ponses
Dim bds As Database
Dim qdf As QueryDef
Dim rst As Recordset
Dim Nb As Long
Set bds =3D CurrentDb
Set qdf =3D bds.CreateQueryDef("temporaire", SQLREQ)
Set rst =3D bds.OpenRecordset(SQLREQ)
With rst
Nb =3D .RecordCount
End With

'Ouverture du formulaire RESULTATS
Dim stDocName As String
Dim stLinkCriteria As String
stDocName =3D "Formulaire_RESULTATS"
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.Maximize

'Remplissage de la combo du formulaire RESULTATS
Forms("Formulaire_RESULTATS").ListeResultats.RowSource =3D=20
SQLREQ

'Nombre de r=E9ponses
Forms("Formulaire_RESULTATS").NbRep =3D Nb



Et c'est l=E0 que =E7a se corse !
si ma requ=E8te commence par "SELECT DISTINCT", j'ai mon=20
nbre d'enregistrement correcte dans la valeur NB. Par=20
contre, si je ne met pas le "DISTINCT", NB contient la=20
valeur "1", quelques soit le nbre d'enregistrement=20
contenus dans la combo. Or, j'aimerai ne pas utiliser le=20
distinct ET avoir une valeur correcte dans la variable NB.

Quelqu'un voit il le pbe et pourrait m'aider ?

Merci

Laurent

4 réponses

Avatar
Bruno MAZÉPA
Salut Laurent
Pourquoi ne pas calculer directement le nombre d'enregistrements concernés,
l'expression à utiliser est : DCount(expr, domaine[, critère])
--
Cordialement.

"Laurent" a écrit dans le message de
news:13d001c39198$49b21550$
salut à tous.

dans un formulaire, je contruit une requete contenu dans
la variable SQLREQ. J'utilise un recordset (temporaire)
pour la réaliser et la place ensuite dans une zone de
liste, placée sur le formulaire "RESULTATS".

cf le code suivant :

'Ouverture d'une requète pour stockage des réponses
Dim bds As Database
Dim qdf As QueryDef
Dim rst As Recordset
Dim Nb As Long
Set bds = CurrentDb
Set qdf = bds.CreateQueryDef("temporaire", SQLREQ)
Set rst = bds.OpenRecordset(SQLREQ)
With rst
Nb = .RecordCount
End With

'Ouverture du formulaire RESULTATS
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "Formulaire_RESULTATS"
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.Maximize

'Remplissage de la combo du formulaire RESULTATS
Forms("Formulaire_RESULTATS").ListeResultats.RowSource SQLREQ

'Nombre de réponses
Forms("Formulaire_RESULTATS").NbRep = Nb



Et c'est là que ça se corse !
si ma requète commence par "SELECT DISTINCT", j'ai mon
nbre d'enregistrement correcte dans la valeur NB. Par
contre, si je ne met pas le "DISTINCT", NB contient la
valeur "1", quelques soit le nbre d'enregistrement
contenus dans la combo. Or, j'aimerai ne pas utiliser le
distinct ET avoir une valeur correcte dans la variable NB.

Quelqu'un voit il le pbe et pourrait m'aider ?

Merci

Laurent
Avatar
3stone
Salut,

"Laurent" a écrit :cf le code suivant :

'Ouverture d'une requète pour stockage des réponses
Dim bds As Database
Dim qdf As QueryDef
Dim rst As Recordset
Dim Nb As Long
Set bds = CurrentDb
Set qdf = bds.CreateQueryDef("temporaire", SQLREQ)
Set rst = bds.OpenRecordset(SQLREQ)


modifie...


With rst
if not .eof then
.movelast
Nb = .RecordCount
.movefirst
end if
End With



--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
Avatar
Laurent
merci de tout coeur, ça marche impécable !!
mais quelle est la raison ? Pourquoi le .Nb seul ne
fonctionne t il pas ?

Laurent


-----Message d'origine-----
Salut,

"Laurent" a écrit :cf le code
suivant :


'Ouverture d'une requète pour stockage des réponses
Dim bds As Database
Dim qdf As QueryDef
Dim rst As Recordset
Dim Nb As Long
Set bds = CurrentDb
Set qdf = bds.CreateQueryDef("temporaire", SQLREQ)
Set rst = bds.OpenRecordset(SQLREQ)


modifie...


With rst
if not .eof then
.movelast
Nb = .RecordCount
.movefirst
end if
End With



--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------



.



Avatar
3stone
Salut,

mais quelle est la raison ? Pourquoi le .Nb seul ne fonctionne t il pas ?



Si tu ouvre un recordset de cette facon, tu te retrouve (de façon imagée) sur le pas de la porte ;-)

Il faut donc "traverser" le recordset avant de pouvoir compter, ce que fait le movelast.

Mais, attention... tu ne peux faire de "MOVEment" qu'à la condition
qu'il y ait "quelque chose" dans le recordset. C'est ce que teste le rst.EOF
En l'absence de ce test, tu obtiendrais une erreur sur un rst vide.

Le rst.MoveFirst n'est là que pour te repositionner sur le début
et pouvoir faire suivre une éventuelle recherche ou autre.

Comme le disait Bruno, tu aurais pu faire un DCount("*","Requête")
mais, j'ai voulu corriger et rester dans ta méthode.


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------