[Access / VB] Noob : comment lancer une requette parametree depuis VB?

Noob : comment lancer une requette parametree depuis VB? [Access / VB] - VB/VBA/VBS - Programmation

Marsh Posté le 08-12-2003 à 15:58:51    

Hello,
 
question tellement basique que je trouve pas la reponse ici, ni dans les 2-3 sites visites. Rigolez pas  :o
 
J'ai une requette qui a besoin d'un parametre, et je veux l'appeler depuis du code vb en precisant ce parametre : comment je fais ?
 
Merci
 
Vous pouvez rigoler maintenant  :whistle:

Reply

Marsh Posté le 08-12-2003 à 15:58:51   

Reply

Marsh Posté le 08-12-2003 à 16:31:48    

ben tu fais ta requête dans une string, tu y insères ton paramètre au passage, puis tu lances ta requête.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-12-2003 à 07:33:20    

:jap: voui j'avais trouve ca aussi. Mais du coup si je veux modifier la requette, il faut le faire aussi dans le code. J'ai plusieurs cas comme ca, qui vont apparaitre plusieurs fois dans le code aussi, donc je cherchais une solution plus "propre" [:mr marron derriere]
J'ai du mal a croire que ca soit impossible :heink:


Message édité par Guigui le 09-12-2003 à 07:33:43

---------------
Viendez faire du VTT en montagne
Reply

Marsh Posté le 09-12-2003 à 09:49:48    

pourquoi ce serait pas propre? c'est une simple requête :heink:
 
et non ce n'est pas possible autrement :o
 
A moins que:
1) tu sois en Access, tu fais un objet Query et tu y accèdes dans ton code via l'objet Command fourni par la librairie ADO
2) tu es dans un SGBD convenable et tu fais une vue. Mais faire une vue pour la moindre requête, c'est complètement idiot. Les vues sont là pour "simuler" une table faite de toutes pièces à partir d'une requête complexe (et donc accélérer/faciliter un peu les choses).
 
Franchement, il n'y a absolument rien de mal à avoir une requête dans le code [:spamafote]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-12-2003 à 09:58:47    

drasche a écrit :

pourquoi ce serait pas propre? c'est une simple requête :heink:

Bha oui mais je doit aussi y acceder manuellement, donc elle existe deja en tant qu'objet requette dans ma base access, et je peux etre ammene a la modifier. Dans ce cas, je devrais modifier la requette, et le code.

Citation :


et non ce n'est pas possible autrement :o

:sweat:

Citation :


A moins que:
1) tu sois en Access, tu fais un objet Query et tu y accèdes dans ton code via l'objet Command fourni par la librairie ADO

Ca y ressemble : je suis sous access et j'ai ma requette faite. Dans le code, j'utilise docmd pour la lancer mais impossible de lui passer le parametre :??:

Citation :


Franchement, il n'y a absolument rien de mal à avoir une requête dans le code [:spamafote]

Au pire je finirai comme ca, certe, mais dans mon cas je prefererai eviter  [:mr marron derriere]


Message édité par Guigui le 09-12-2003 à 09:59:40

---------------
Viendez faire du VTT en montagne
Reply

Marsh Posté le 09-12-2003 à 10:42:05    

DoCmd et Command n'ont rien à voir. Command est un objet de la librairie ADO auquel on peut passer des paramètres, mais il faut que ton objet requête les accepte (donc quand tu lances ta requête à la main, il te demande aussi ces paramètres).
 
Tu utilises quelle version d'Access?


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-12-2003 à 10:45:56    

drasche a écrit :

DoCmd et Command n'ont rien à voir. Command est un objet de la librairie ADO auquel on peut passer des paramètres, mais il faut que ton objet requête les accepte (donc quand tu lances ta requête à la main, il te demande aussi ces paramètres).

OK, ca s'utilise comment ca ?

Citation :


Tu utilises quelle version d'Access?

2002 SP2
 
en tout cas, merci pour tes reponses :jap:


---------------
Viendez faire du VTT en montagne
Reply

Marsh Posté le 09-12-2003 à 11:11:37    

en admettant que la variable strQryName contienne le nom de ton objet query, cela ressemble à ceci en DAO (la vieille API utilisée par Access, je ne sais pas si elle est encore en vigueur sous Access XP)
 

Code :
  1. MaDatabase.QueryDefs(strQryName).Parameters!langue = iLangue
  2. Set rs = MaDatabase.QueryDefs(strQryName).OpenRecordset


 
La première ligne fournit le paramètre à la query (autant de lignes que de paramètres bien sûr)
La seconde ouvre le recordset.


Message édité par drasche le 09-12-2003 à 11:11:50

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-12-2003 à 11:29:20    

En ADO (selon mes souvenirs, je ne garantis pas que ça marche du premier coup [:joce])
 

Code :
  1. ' Soit strCommandName = le nom de l'objet requête dans la DB Access
  2. ' Soi ConnectionCourante = un objet ADODB.Connection ouvert
  3. Dim objCmd As ADODB.Command ' La commande pour ouvrir la requête
  4. Dim objParameter As ADODB.Parameter ' Paramètre à passer à la commande
  5. Dim rst As ADODB.Recordset ' Le résultat
  6. Set objCmd = New ADODB.Command ' Création de la commande
  7. Set objCmd.ActiveConnection = ConnectionCourante ' Association avec la DB
  8. objCmd.CommandText = strCommandName ' Assignation de la requête voulue
  9. objCmd.CommandType = adCmdStoredProc ' type par défaut pour un objet requête Access
  10. ' Ajout d'un paramètre:
  11. '   strParameter = le nom du paramètre,
  12. '   adInteger est le type,
  13. '   vValue est la valeur à passer pour ce paramètre
  14. Set objParameter = objCmd.CreateParameter(strParameter, adInteger, , , vValue)
  15. Call objCmd.Parameters.Append(objParameter)
  16. ' [...] répéter ces deux lignes autant de fois qu'il y a de paramètres
  17. ' Exécution de la requête et récupération du résultat
  18. Set rst = objCmd.Execute()


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-12-2003 à 11:34:57    

:jap: merci ! Je vais essayer en ADO cet apres-midi : ca m'a l'air d'etre exactement ce que je cherchais !
 
Je te dis si ca a marche tout a l'heure :hello:


---------------
Viendez faire du VTT en montagne
Reply

Marsh Posté le 09-12-2003 à 11:34:57   

Reply

Marsh Posté le 09-12-2003 à 15:58:15    

drasche a écrit :


Code :
  1. Set objCmd.ActiveConnection = ConnectionCourante ' Association avec la DB




Je bloque ici : comment je connecte a ma database ?
 
je suis vraiment noob  :heink:


---------------
Viendez faire du VTT en montagne
Reply

Marsh Posté le 09-12-2003 à 16:11:25    

je t'avoue que je ne sais pas :/
 
En DAO, ta DB est référencée par la variable CurrentDB. Je te suggère donc d'essayer ma première solution avec les QueryDefs.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-12-2003 à 16:26:04    

drasche a écrit :

je t'avoue que je ne sais pas :/
 
En DAO, ta DB est référencée par la variable CurrentDB. Je te suggère donc d'essayer ma première solution avec les QueryDefs.

J'ai essaye, mais je bloque aussi. Bon je reessaye les deux demain matin.
 
Merci :jap:


---------------
Viendez faire du VTT en montagne
Reply

Marsh Posté le 10-12-2003 à 15:11:55    

bon, hayest j'ai reussi en DAO, mais au prix d'un contournement barbare : impossible de recuperer la querydef a partir du nom : querydefs(strName) ou querydefs(itemNumber), rien ne passe :heink: Du coup je fais un :


Dim qdfTemp As QueryDef
 
With CurrentDb
    For Each qdfTemp In .QueryDefs
        If qdfTemp.Name = strName Then
            qdfTemp.Parameters!strParameter = DateParamValue
            qdfTemp.Execute
        End If
    Next qdfTemp
end With


 [:ddr555]  [:totoz] Mais bon ca passe...
 
Merci :jap: j'ai bien progresse la  [:evil-raphiscorn]


---------------
Viendez faire du VTT en montagne
Reply

Marsh Posté le 10-12-2003 à 15:21:33    

Hayest c'est bon, j'avais juste oublie le Set :whistle:
 
Patapay je viens du basic sous ZX Spectrum + hein :lol:


---------------
Viendez faire du VTT en montagne
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed