[VBA ADO] Requête enregistrée qui change de collection
Bonjour,
Je créé une requête enregistrée dans Access à l'aide de VBA. J'obtiens quelques fois le message suivant : Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé..
Après une trace de mon code, je vois que lorsque ce problème arrive, l'objet n'est plus dans la collection Views, mais dans la collection Procedures, alors que j'avais clairement fait :
Code:
cat.Views.Append nomRequete, cmd
Est-ce que le fait de ne pas déterminer le Provider lors de la connexion, mais d'utiliser CurrentProject.connection, pourrait être la source de mon problème ? Voici pourquoi je me pose la question (j'ai trouvé ça dans l'aide VBA Access) :
Citation:
Remarque En cas d'utilisation du fournisseur OLE DB pour Microsoft Jet, la méthode Append de la collection Views permet de spécifier un objet Procedure à la place d'un objet View dans le paramètre Command. L'objet Procedure est ajouté à la source de données, puis à la collection Views. Après Append, si les collections Procedures et Views sont actualisées, l'objet Procedure ne fait plus partie de la collection Views et apparaît dans la collection Procedures.
Est-ce que le fournisseur OLE DB est le fournisseur par défaut pour ADO ? Que dois-je prendre comme fournisseur ?
Un éclaircissement serait grandement apprécié. Merci à l'avance !
Nathalie
Oui c'est ta requête qui accroche
Regarde bien ce bout de requête que tu as fait
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
Private Sub EnregistrerRequete()
On Error GoTo err_EnregistrerRequete
Dim cmdSQL As String
Dim strNom As String
Dim flgCond As Boolean
strNom = "rTerr" & strUser
flgCond = False
cmdSQL = "SELECT * FROM Territoire"
If Not flgAnnule Then
'ajout de la ou des conditions
cmdSQL = cmdSQL & " WHERE ("
'Vérification des cases à cocher
For Each ctl In Me.Controls
strCtl = ctl.Properties("Name")
If Left(strCtl, 3) = "chk" Then
If ctl Then
strFld = Mid(strCtl, 4)
'S'il y a plus d'une condition...
If flgCond Then cmdSQL = cmdSQL & " OR " |
il se peut que ça donne ceci comme résultat :
select * from Territoire
where ( OR
Refais cette partie et tiens moi au courant Nath ;)
Entre québécois il faut s'entraider ;)
Alex
Peut-être ne suis-je pas assez concise !
Bonjour,
Comme je n'ai pas beaucoup de réponse :cry: , je me permets de reposer la question autrement en espérant être plus claire :
J'aimerais seulement savoir si, avec la librairie ADO, une requête enregistrée comportant une clause WHERE doit obligatoirement être une requête paramétrée (donc, si j'ai bien compris, dans la collection Procedures), ou peut demeurer une requête non paramétrée (si j'ai toujours bien compris, dans la collection Views) ?
Dans le contexte mentionné plus haut, comme je ne connais pas d'avance le nombre de paramètres, je vois difficilement comment créer une requête paramétrée. Quelqu'un pourrait me mettre sur la piste ? :marteau:
Merci à l'avance !
Nathalie
Une question de Provider ?
Est-ce que mon problème pourrait venir du fait que je n'ai pas explicitement définit la connexion ?
Voici ce que j'ai trouvé dans l'aide Access et que j'aimerais bien qu'on me traduise dans un style «pour les nuls» :
Citation:
Remarque En cas d'utilisation du fournisseur OLE DB pour Microsoft Jet, la méthode Append de la collection Views permet de spécifier un objet Procedure à la place d'un objet View dans le paramètre Command. L'objet Procedure est ajouté à la source de données, puis à la collection Views. Après Append, si les collections Procedures et Views sont actualisées, l'objet Procedure ne fait plus partie de la collection Views et apparaît dans la collection Procedures.
Ce qui m'inquiète dans la définition de la connexion, c'est d'avoir à y inscrire un path physique pour le Data Source. Est-ce que ça peut être un path logique ? J'aurai à installer l'application sur 22 serveurs différents !!
J'ose espérer de vos nouvelles ! :cry:
Le view est plus difficile qu'un recordset
L'utilisation d'un view est plus difficile qu'un recordset, mais il fait l'affaire aussi ;). De plus, j'ai remarqué que tu veux avoir le path physique? Application.CurrentProject.Path ou tu veux s'avoir l'usager utilisant le programme Environ("username") ou si tu veux avoir le nom de ta bd Application.CurrentDb.Name...
Il y a des bon exemple de recorset sur le net et au besoin je peux t'en trouver un, mais je crois que tu es sûrement capable d'en trouver un par toi même il en as une tonne.
Alex Bonne fin de semaine
Voici un très bon site...
Il peut t'aider dans ta recherche pour le path physique d'un coup que j'aie pas mentionné celui que tu voulais : http://blogs.officezealot.com/charle...2/10/3574.aspx
Alex
Nope ceci n'est pas correct
cat.Views retourne un élément de moins que réellement :S
Il faudrait prendre une autre façon de vérifier si ta requête existe.
Alex
Problème de cette référence.
ActiveX Data Objects Extensions
Ehh j'ai de la misère à comprendre
Salut Nath, comment ça va en ce beau Vendredi ensolleilé entre 4 mur?
Bon revenons à nos moutons c'est Alexandre Berger qui te le dis.
La première façon de faire pour vérifier si la requête existait avec besoin de la référence ADO, car elle ne marche pas sans. (en plus, elle marchait mal.)
La façon que je t'ai proposé fait référence à DAO et elle marche mieux.
Donc, je ne vois pas comment le faire sans référence, car c'est vraiment la référence qui permet d'accéder à nos objets...
Alexxx
Bref, je te dis le problème
Bref, je te dis le problème...
Avec la fonction que tu as codé en ADO, il ne voit pas la première requête.
Je ne sais pas quoi dire d'autre.
Bonne chance.
Alex
:lahola:
:pingoin2:
Continue, j'aime ça... Hihihi
:mouarf:
Alors si je comprends bien, ce n'était pas une bonne idée d'utiliser ADO, pour ensuite sauvegarder des requêtes (du nom des utilisateurs) dans ma base Access (requêtes que je détruis en quittant l'appl). Si je veux être plus soft, je devrais utiliser des recordsets, c'est ça ? C'est que je voulais que les jeux d'enregistrements perdurent et puissent être récupérés tant que l'application est ouverte... j'imagine comme les procédures stockées dans SQL-Server...
Nath
Pkoi tu utilise pas les deux références!
Re-salut Nath, ceci est mon dernier courriel avant la fin de semaine...
Donc, oui ça serait plus facile avec les recordset.
Du moins je crois...
Il n'y a pas de bonne, ni de mauvaise façon de faire.
Juste des façons de faire plus compliqué.
Je t'ai proposé beaucoup de solutions comme tu viens de la mentionné.
Donc, je suis sûre que tu es capable de te débrouillé.
J'ai déjà lu sur une autre faq ce message :
"Si tu donne un poisson à un homme il sera rassasié pour la journée.
Si tu donne une canne-à-pêche il le sera pour l'éternité."
Alexxx qui te souhaite bonne fin de semaine tout en te fouettant.
:sm: