OVH Cloud OVH Cloud

Nb d'enregistrement d'un recordset

8 réponses
Avatar
Arthemuss
Bonjour

Lorsque j'utilise l'instruction Openrecordset comme=20
suit : set matable =3D mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux r=E9cuperer le=20
nombre d'enregitrements du recordset.
Si j'utilise la mani=E8re suivante :
set matable =3D mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount =3D -1)
La syntaxe de l'instruction "openrecordset" est=20
(source,type,otpions,lockedits).Dans la premi=E8re=20
=E9criture , le type est donc dbreadonly or d'apr=E8s l'aide=20
Access la constante dbreadonly n'existe pas pour=20
l'argument type.
Je ne comprends pas la diff=E9rence de syntaxe.
Autre question : quelle est la syntaxe la plus rapide ?*

Merci
Arthemus

8 réponses

Avatar
3stone
Salut,

"Arthemuss"

Lorsque j'utilise l'instruction Openrecordset comme
suit : set matable = mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux récuperer le
nombre d'enregitrements du recordset.
Si j'utilise la manière suivante :
set matable = mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount = -1)
La syntaxe de l'instruction "openrecordset" est
(source,type,otpions,lockedits).Dans la première
écriture , le type est donc dbreadonly or d'après l'aide
Access la constante dbreadonly n'existe pas pour
l'argument type.
Je ne comprends pas la différence de syntaxe.


Pour "compter" les enregistrements dans un recordset,
il faut absolument le *traverser* totalement...

donc, faire queque chose comme :


if not matable.EOF then
matable.MoveLast
x = matable.recordcount
end if


Autre question : quelle est la syntaxe la plus rapide ?*


si pas de recordset ouvert, pour faire "autre chose"...
tu peux également utiliser :

x = DCount("*","LaTable")


--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------
Avatar
Ilan
Bonjour,

C'est normal Arthemus
dbOpenForwardOnly et dbReadOnly sont des constantes.
dbOpenForwardOnly=8 et DbReadOnly=4
A noter que dbAppendOnly=8 aussi.
En clair en passant dbOpenForwardOnly dans l'argument OPTION, tu ouvres
ton recordset en ajout uniquement. Il n'y a donc aucun enregistrement dans
ton recordset.




Bonjour

Lorsque j'utilise l'instruction Openrecordset comme
suit : set matable = mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux récuperer le
nombre d'enregitrements du recordset.
Si j'utilise la manière suivante :
set matable = mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount = -1)
La syntaxe de l'instruction "openrecordset" est
(source,type,otpions,lockedits).Dans la première
écriture , le type est donc dbreadonly or d'après l'aide
Access la constante dbreadonly n'existe pas pour
l'argument type.
Je ne comprends pas la différence de syntaxe.
Autre question : quelle est la syntaxe la plus rapide ?*

Merci
Arthemus



Avatar
Bonjour

Le problème est que j'ai mis dbOpenForwardOnly dans
l'argument type.En fait tant que l'eof n'est pas atteint
je peux récuperer le recordcount et une fois l'eof atteint
le recordcount = -1.
Merci
@+
-----Message d'origine-----
Bonjour,

C'est normal Arthemus
dbOpenForwardOnly et dbReadOnly sont des constantes.
dbOpenForwardOnly=8 et DbReadOnly=4
A noter que dbAppendOnly=8 aussi.
En clair en passant dbOpenForwardOnly dans l'argument
OPTION, tu ouvres

ton recordset en ajout uniquement. Il n'y a donc aucun
enregistrement dans

ton recordset.




Bonjour

Lorsque j'utilise l'instruction Openrecordset comme
suit : set matable = mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux récuperer
le


nombre d'enregitrements du recordset.
Si j'utilise la manière suivante :
set matable = mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount = -1)
La syntaxe de l'instruction "openrecordset" est
(source,type,otpions,lockedits).Dans la première
écriture , le type est donc dbreadonly or d'après
l'aide


Access la constante dbreadonly n'existe pas pour
l'argument type.
Je ne comprends pas la différence de syntaxe.
Autre question : quelle est la syntaxe la plus rapide ?*

Merci
Arthemus

.





Avatar
Daniel Carollo
Bonsoir Arthemuss!

Comment avez-vous declare votre objet "matable" ?
Pour qu'il n'y ait pas d'ambiguite, le mieux est de le declarer de facon
explicite:
Dim myRst as DAO.Recordset
ou
Dim myRst as ADODB.Recordset
suivant la bibliotheque que vous voulez utiliser.

.OpenRecordset est une methode qui est commune a cinq type d'objets dans la
bibliotheque ADO:
Database et Connection d'une part,
QueryDef, Recordset et TableDef d'autre part.

Si vous allez dans l'explorateur d'objets, vous pouvez touver:
Function OpenRecordset(Name As String, [Type], [Options], [LockEdit]) As
Recordset
Member of DAO.Database dans le premier cas, et
Function OpenRecordset([Type], [Options]) As Recordset
Member of DAO.TableDef dans le dernier cas.

L'aide en ligne montre bien qu'il y a deux syntaxes differentes pour ces
deux groupes d'objets.

D'autre part, ne vous meprenez pas sur ce que les parametres signifient: ils
ne sont la que pour aider a la comprehension du code, en fait ils
correspondent a des constantes numeriques:
? dbForwardOnly
256
? dbReadOnly
4
? dbOpenForwardOnly
8

Regardez l'exemple qui est donne dans l'aide en ligne sur OpenRecordSet,
cinq types differents sont ouverts...

Quand a votre derniere question, ce n'est pas la syntaxe qui determine la
rapidite, mais la facon d'ouvrir le recordset, son contenu et les operations
necessaires pour obtenir le recordset. S'il y a beaucoup de jointures a
faire entre plusieurs tables, de fonctions a evaluer et autre operations, si
le moteur de base peut utiliser des index ou pas, si la memoire disponible
est grande par rapport aux donnees a traiter, tout ces parametres vont
influer sur la rapidite de l'operation.
En regle generale, un recordset ouver en mode Snapshot (donc ReadOnly) sera
le plus rapide, mais si la rapidite est importante a l'utilisateur, il vaut
mieux faire des essais mesures.

J'espere que ca vous aide a demarrer vos explorations...

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...


"Arthemuss" wrote in message
news:399501c4a966$9d0efce0$
Bonjour

Lorsque j'utilise l'instruction Openrecordset comme
suit : set matable = mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux récuperer le
nombre d'enregitrements du recordset.
Si j'utilise la manière suivante :
set matable = mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount = -1)
La syntaxe de l'instruction "openrecordset" est
(source,type,otpions,lockedits).Dans la première
écriture , le type est donc dbreadonly or d'après l'aide
Access la constante dbreadonly n'existe pas pour
l'argument type.
Je ne comprends pas la différence de syntaxe.
Autre question : quelle est la syntaxe la plus rapide ?*

Merci
Arthemus
Avatar
Roland Godde
Les curseurs du type "ForwardOnly" ne permettent pas le comptage des
enregistrements.

Roland




"Arthemuss" a écrit dans le message de
news:399501c4a966$9d0efce0$
Bonjour

Lorsque j'utilise l'instruction Openrecordset comme
suit : set matable = mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux récuperer le
nombre d'enregitrements du recordset.
Si j'utilise la manière suivante :
set matable = mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount = -1)
La syntaxe de l'instruction "openrecordset" est
(source,type,otpions,lockedits).Dans la première
écriture , le type est donc dbreadonly or d'après l'aide
Access la constante dbreadonly n'existe pas pour
l'argument type.
Je ne comprends pas la différence de syntaxe.
Autre question : quelle est la syntaxe la plus rapide ?*

Merci
Arthemus
Avatar
Ilan
Bonjour

Desole, je me suis trompe dans les valeurs des constantes.
Constante TYPE : dbOpenForwardOnly = 8
dbSnapshot=4
Constante OPTION : dbAppendOnly=8
dbReadOnly=4

Dans le cas du dbOpenForwardOnly, le recordcount renvoie la position du
curseur
une fois EOF atteint la position du curseur est -1.
Pour récupérer le nombre total d'enregistrements incremente un compteur
avant tout deplacement dans le recordset ou place le recordcount dans une
variable.

WHILE NOT matable.EOF
Nb=matable.RecordCount
matable.movenext
WEND


Bonjour

Le problème est que j'ai mis dbOpenForwardOnly dans
l'argument type.En fait tant que l'eof n'est pas atteint
je peux récuperer le recordcount et une fois l'eof atteint
le recordcount = -1.
Merci
@+
-----Message d'origine-----
Bonjour,

C'est normal Arthemus
dbOpenForwardOnly et dbReadOnly sont des constantes.
dbOpenForwardOnly=8 et DbReadOnly=4
A noter que dbAppendOnly=8 aussi.
En clair en passant dbOpenForwardOnly dans l'argument
OPTION, tu ouvres

ton recordset en ajout uniquement. Il n'y a donc aucun
enregistrement dans

ton recordset.




Bonjour

Lorsque j'utilise l'instruction Openrecordset comme
suit : set matable = mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux récuperer
le


nombre d'enregitrements du recordset.
Si j'utilise la manière suivante :
set matable = mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount = -1)
La syntaxe de l'instruction "openrecordset" est
(source,type,otpions,lockedits).Dans la première
écriture , le type est donc dbreadonly or d'après
l'aide


Access la constante dbreadonly n'existe pas pour
l'argument type.
Je ne comprends pas la différence de syntaxe.
Autre question : quelle est la syntaxe la plus rapide ?*

Merci
Arthemus

.








Avatar
arthemus
Bonjour

C'est ce que j'ai fait. Merci

@+
Arthemus

-----Message d'origine-----
Bonjour

Desole, je me suis trompe dans les valeurs des
constantes.

Constante TYPE : dbOpenForwardOnly = 8
dbSnapshot=4
Constante OPTION : dbAppendOnly=8
dbReadOnly=4

Dans le cas du dbOpenForwardOnly, le recordcount renvoie
la position du

curseur
une fois EOF atteint la position du curseur est -1.
Pour récupérer le nombre total d'enregistrements
incremente un compteur

avant tout deplacement dans le recordset ou place le
recordcount dans une

variable.

WHILE NOT matable.EOF
Nb=matable.RecordCount
matable.movenext
WEND


Bonjour

Le problème est que j'ai mis dbOpenForwardOnly dans
l'argument type.En fait tant que l'eof n'est pas
atteint


je peux récuperer le recordcount et une fois l'eof
atteint


le recordcount = -1.
Merci
@+
-----Message d'origine-----
Bonjour,

C'est normal Arthemus
dbOpenForwardOnly et dbReadOnly sont des constantes.
dbOpenForwardOnly=8 et DbReadOnly=4
A noter que dbAppendOnly=8 aussi.
En clair en passant dbOpenForwardOnly dans l'argument
OPTION, tu ouvres

ton recordset en ajout uniquement. Il n'y a donc aucun
enregistrement dans

ton recordset.




Bonjour

Lorsque j'utilise l'instruction Openrecordset comme
suit : set matable = mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux
rÃf©cuperer




le
nombre d'enregitrements du recordset.
Si j'utilise la maniÃf¨re suivante :
set matable = mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount = -1)
La syntaxe de l'instruction "openrecordset" est
(source,type,otpions,lockedits).Dans la premiÃf¨re
Ãf©criture , le type est donc dbreadonly or
d'aprÃf¨s




l'aide
Access la constante dbreadonly n'existe pas pour
l'argument type.
Je ne comprends pas la diffÃf©rence de syntaxe.
Autre question : quelle est la syntaxe la plus
rapide ?*





Merci
Arthemus

.




.







Avatar
arthemus
Bonjour

Merci pour les éclaircissements
Bonne journée

Arthemus

-----Message d'origine-----
Bonsoir Arthemuss!

Comment avez-vous declare votre objet "matable" ?
Pour qu'il n'y ait pas d'ambiguite, le mieux est de le
declarer de facon

explicite:
Dim myRst as DAO.Recordset
ou
Dim myRst as ADODB.Recordset
suivant la bibliotheque que vous voulez utiliser.

..OpenRecordset est une methode qui est commune a cinq
type d'objets dans la

bibliotheque ADO:
Database et Connection d'une part,
QueryDef, Recordset et TableDef d'autre part.

Si vous allez dans l'explorateur d'objets, vous pouvez
touver:

Function OpenRecordset(Name As String, [Type], [Options],
[LockEdit]) As

Recordset
Member of DAO.Database dans le premier cas, et
Function OpenRecordset([Type], [Options]) As Recordset
Member of DAO.TableDef dans le dernier cas.

L'aide en ligne montre bien qu'il y a deux syntaxes
differentes pour ces

deux groupes d'objets.

D'autre part, ne vous meprenez pas sur ce que les
parametres signifient: ils

ne sont la que pour aider a la comprehension du code, en
fait ils

correspondent a des constantes numeriques:
? dbForwardOnly
256
? dbReadOnly
4
? dbOpenForwardOnly
8

Regardez l'exemple qui est donne dans l'aide en ligne sur
OpenRecordSet,

cinq types differents sont ouverts...

Quand a votre derniere question, ce n'est pas la syntaxe
qui determine la

rapidite, mais la facon d'ouvrir le recordset, son
contenu et les operations

necessaires pour obtenir le recordset. S'il y a beaucoup
de jointures a

faire entre plusieurs tables, de fonctions a evaluer et
autre operations, si

le moteur de base peut utiliser des index ou pas, si la
memoire disponible

est grande par rapport aux donnees a traiter, tout ces
parametres vont

influer sur la rapidite de l'operation.
En regle generale, un recordset ouver en mode Snapshot
(donc ReadOnly) sera

le plus rapide, mais si la rapidite est importante a
l'utilisateur, il vaut

mieux faire des essais mesures.

J'espere que ca vous aide a demarrer vos explorations...

--
Daniel :-)

Computing Technologies International - www.computing-
tech.com - We

provide solutions...


"Arthemuss" wrote
in message

news:399501c4a966$9d0efce0$
Bonjour

Lorsque j'utilise l'instruction Openrecordset comme
suit : set matable = mabd.openrecordset
(chsql,dbreadonly,dbopenforwardonly) je peux récuperer le
nombre d'enregitrements du recordset.
Si j'utilise la manière suivante :
set matable = mabd.openrecordset
(chsql,dbopenforwardonly,dbreadonly) je ne peux pas.
(recordcount = -1)
La syntaxe de l'instruction "openrecordset" est
(source,type,otpions,lockedits).Dans la première
écriture , le type est donc dbreadonly or d'après l'aide
Access la constante dbreadonly n'existe pas pour
l'argument type.
Je ne comprends pas la différence de syntaxe.
Autre question : quelle est la syntaxe la plus rapide ?*

Merci
Arthemus


.