OVH Cloud OVH Cloud

recuperation sous VBA

9 réponses
Avatar
JMP
Bonjour

J'ai une requete qui me liste tous les enregistrement d'un champs d'une
table :

SELECT GUIDES.Mail
FROM GUIDES
WHERE (((GUIDES.Mail) Is Not Null));

Comment recuperer dans une variable la liste des resultats séparés par un
point virgule !

Merci d'avance pour vos réponses !

9 réponses

Avatar
3stone
Salut,

"JMP"
| J'ai une requete qui me liste tous les enregistrement d'un champs d'une
| table :
|
| SELECT GUIDES.Mail
| FROM GUIDES
| WHERE (((GUIDES.Mail) Is Not Null));
|
| Comment recuperer dans une variable la liste des resultats séparés par un
| point virgule !


Tu peux t'inspirer ici :
http://access.jessy.free.fr/index.html?Menu=3&Page=ConcatForQuery


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
Ayrton [ASC]
Bonjour *3stone*
Dans ton message de news:,
Tu as pensé très fort :-(*)

Salut,
Tu peux t'inspirer ici :
http://access.jessy.free.fr/index.html?Menu=3&Page=ConcatForQuery


Salut Pierre,

Je parcourais tranquillement le NG et je suis tombé ta réponse à JMP ; j'a
iété voir sur le lien que tu donnes et je trouvais la fonction de Jessy très
intéressante ; j'ai testé pour voir et je me retrouve avec un message
d'erreur " Incompatibilité de type" ( message d'erreur 13 ).
J'ai bien mis mes noms de champs ( données texte ) et dans le doute j'ai
repris exactement les mêmes noms de champ que dans l'exemple et j'ai
copié/collé le sql pour être sûr que je ne fasse pas d'erreur dans ma
syntaxe ; et j'ai toujours le même message d'erreur ;-(
Je pense avoir avoir les bonnes références de coché mais par contre je suis
en access 2002 ; est ce que la fonction est différente de entre Access 97 et
2002 ?

Merci
Bon Dimanche

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

Avatar
Eric
Bonjour Ayrton,

L'erreur doit être sur
Set rst = db.OpenRecordset(strRst, dbOpenDynaset)
car tu dois avoir de cocher, dans tes références parmi les autres:
Microsoft ActiveX Data Objects x.x Library
*avant*
Microsoft DAO 3.x Object Library

Soit tu fais passer Microsoft DAO 3.x Object Library avant Microsoft
ActiveX Data Objects x.x Library
Soit tu préfixes rst dans ta déclaration comme suit:
Dim rst as DAO.Recordset

... j'ai testé pour voir et je me retrouve avec un message
d'erreur " Incompatibilité de type" ( message d'erreur 13 ).
Je pense avoir avoir les bonnes références de coché mais par contre je suis
en access 2002 ; est ce que la fonction est différente de entre Access 97 et
2002 ?

Merci
Bon Dimanche



--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Ayrton [ASC]
Bonjour *Eric*
Dans ton message de news:%,
Tu as pensé très fort :-(*)
Bonjour Ayrton,

L'erreur doit être sur
Set rst = db.OpenRecordset(strRst, dbOpenDynaset)
car tu dois avoir de cocher, dans tes références parmi les autres:
Microsoft ActiveX Data Objects x.x Library
*avant*
Microsoft DAO 3.x Object Library

Soit tu fais passer Microsoft DAO 3.x Object Library avant Microsoft
ActiveX Data Objects x.x Library
Soit tu préfixes rst dans ta déclaration comme suit:
Dim rst as DAO.Recordset


Bonjour Eric,

Merci beaucoup ; c'est la seconde solution qui a fonctionnée ;-) Dans mes
références, j'ai deux Microsoft ActiveX Data Objetcts Library ( 1 avec le No
2,5 et l'autre avec 2,1 ) ; j'avais déjà la version 2,5 de coché quand
j'avais mon message d'erreur ; par contre, comme tu me l'a indiqué, le fait
de préfixer DIM rst as DAO.recordset fonctionne au poil ! ;-) Merci
beaucoup.

Pour ma gouverne perso, à l'occasion, pourrais tu juste me dire ce que
veulent dire :
1) DIM rst as DAO.recordset
2)set rst = blabla.........

J'ai un peu de mal à bien interpréter ces ces deux instructions ( remarque,
s'il n'y avait que ça que j'avais du mal, ce serait bien lol )
Merci et bonne fin de soirée

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

Avatar
3stone
Salut,

"Ayrton [ASC]"
| Merci beaucoup ; c'est la seconde solution qui a fonctionnée ;-) Dans mes
| références, j'ai deux Microsoft ActiveX Data Objetcts Library ( 1 avec le No
| 2,5 et l'autre avec 2,1 ) ; j'avais déjà la version 2,5 de coché quand
| j'avais mon message d'erreur ; par contre, comme tu me l'a indiqué, le fait
| de préfixer DIM rst as DAO.recordset fonctionne au poil ! ;-) Merci
| beaucoup.


Essaie de décocher un maximum de références inutiles...

Commence par décocher la plus faible (2.1 par rapport à 2.5)
et compile pour voir si cela passe tout de même.
Chaque références inutile de créera tôt ou tard un problème!


| Pour ma gouverne perso, à l'occasion, pourrais tu juste me dire ce que
| veulent dire :
| 1) DIM rst as DAO.recordset
| 2)set rst = blabla.........


1)
Tu déclare la variable rst pouvoir lui attribuer un recordset.
Difficulté: Deux objets possèdent la propriété recordset, ADO et DAO
Pour que Access s'y retrouve, tu lui indique l'objet concerné.

Cela n'était pas utile avant Access 2000, puisque Access utilisait
par défaut l'objet DAO. Mais, MS à eu la bonne idée ;-( de modifier
cette valeur par défaut et utilise l'objet ADO... ce qui fait trébucher
l'application lorsque l'objet utilisé n'est pas précisé lors de la déclaration.

2)
Tu indique ce que tu attribue à la variable déclarée précédemment...


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
Ayrton [ASC]
Bonjour *3stone*
Dans ton message de news:,
Tu as pensé très fort :-(*)
Salut,


Salut Pierre,

Essaie de décocher un maximum de références inutiles...

Commence par décocher la plus faible (2.1 par rapport à 2.5)
et compile pour voir si cela passe tout de même.
Chaque références inutile de créera tôt ou tard un problème!


C'est bon ! j'ai décoché la plus ancienne et ça compile sans souci ;-)




1)
Tu déclare la variable rst pouvoir lui attribuer un recordset.
Difficulté: Deux objets possèdent la propriété recordset, ADO et DAO
Pour que Access s'y retrouve, tu lui indique l'objet concerné.


D'accord pour le principe ; seulement moi, j'en suis encore à déclarer mes
variables avec l'instruction DIM ;-(
Dim toto as String
toto = titi

Donc, avec mes toutes petites connaissance en vba, tu comprendras que j'ai
un peu de mal quand je lis des déclarations faites avec des trucs du genre :
Dim rst as ADODB.recordset
set rst = New ADODB.Recordset
set etc... etc.....

A vrai dire je sais ce qu'est un recordset ( ça représente l'ensemble des
enregistrements je crois ) mais je ne sais pas ce à quoi correspond " set "
; ça me perturbe un peu par rapport à ce que je fais en temps normal ( c'est
à dire pas grand chose encore ! ;-) )

Cela n'était pas utile avant Access 2000, puisque Access utilisait
par défaut l'objet DAO. Mais, MS à eu la bonne idée ;-( de modifier
cette valeur par défaut et utilise l'objet ADO... ce qui fait
trébucher l'application lorsque l'objet utilisé n'est pas précisé
lors de la déclaration.


Eh bien si c'est comme cela, il faudra bie nque je m'y fasse !
2)

Tu indique ce que tu attribue à la variable déclarée précédemment...


Si j'ai bien compris, ne serait pas avec " set " que j' indiquerais ce que
j'attribue à ma variable ?

En tout cas, merci pour ces explications ; une fois encore, je vais en
prendre bonne note !
Aïe Aïe Aïe ma pauvre tête lol

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

Avatar
Eric
Bonjour Ayrton,

Lorsque tu manipules des variables-objet tu es obligé d'employer Set
pour procéder à une affectation. Les déclarations étant très fortement
préconisées pour quelque type de variable.

Dim rst as DAO.Recordset
tu déclares et précises à Access que rst est un Objet Recordset de la
librairie DAO.

Set rst = db.OpenRecordset(...)
Cette instruction affecte à rst le contenu du recordset ouvert par la
méthode OpenRecordset.

D'accord pour le principe ; seulement moi, j'en suis encore à déclarer mes
variables avec l'instruction DIM ;-(
Dim toto as String
toto = titi



Dans ton exemple, tu manipules une variable *ordinaire* (de type chaine
ou String) donc jamais de Set.
Il y a quelques années (ô combien lointaines) on devait faire:
Dim toto as String
Let toto = "titi"
mais l'instruction Let était facultative, elle finit donc par tomber en
désuétude !

Plus clair ?
--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Ayrton [ASC]
Bonjour *Eric*
Dans ton message de news:uGCLN%,
Tu as pensé très fort :-(*)
Bonjour Ayrton,


Bonjour Eric,

Lorsque tu manipules des variables-objet tu es obligé d'employer Set
pour procéder à une affectation. Les déclarations étant très fortement
préconisées pour quelque type de variable.

Dim rst as DAO.Recordset
tu déclares et précises à Access que rst est un Objet Recordset de la
librairie DAO.

Set rst = db.OpenRecordset(...)
Cette instruction affecte à rst le contenu du recordset ouvert par la
méthode OpenRecordset.


Ca commence à rentrer ! il va juste falloir que je me penche un peu plus là
dessus si je veux avancer ; au moins ton explication m'éclaire beaucoup.


Dans ton exemple, tu manipules une variable *ordinaire* (de type
chaine ou String) donc jamais de Set.
Il y a quelques années (ô combien lointaines) on devait faire:
Dim toto as String
Let toto = "titi"
mais l'instruction Let était facultative, elle finit donc par tomber
en désuétude !

Plus clair ?


Absolument Eric et je te remercie ; j'ai oublié de te dire hier que tu as
mis " dans le mille " pour la ligne qui me générait une erreur ; c'etait
bien la ligne :
set rst= db.OpenRecordset(strRst, dbOpenDynaset)

Bravo ! ;-)
Et merci encore de l'aide et de toutes ces explications ; entre les tiennes
et celles de 3stone, j'aurais presque de quoi écrire un bouquin !! lol
Je mets tout ce que vous me dites de côté car cela me sert à avancer !

Encore merci à vous deux

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

Avatar
JMP
Ca marche merci !!!


Salut,

"JMP"
| J'ai une requete qui me liste tous les enregistrement d'un champs d'une
| table :
|
| SELECT GUIDES.Mail
| FROM GUIDES
| WHERE (((GUIDES.Mail) Is Not Null));
|
| Comment recuperer dans une variable la liste des resultats séparés par un
| point virgule !


Tu peux t'inspirer ici :
http://access.jessy.free.fr/index.html?Menu=3&Page=ConcatForQuery


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/