Executer une requête via un bouton sou Access

Fermé
Fabinou - 19 oct. 2007 à 11:59
 Fabinou - 24 oct. 2007 à 16:17
Bonjour,

J'aurai besoin lorsque je clic sur un bouton dans un Formulaire Access, que celui-ci exécute une requête en utilisant comme critère ce qu'il y a d'écrit sur le bouton, et que le résultat s'affiche sur mon formulaire.
ex : SELECT pc.nom FROM pc WHERE pc.nom = nomdubouton

Please Help me

15 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
22 oct. 2007 à 18:48
salut,

teste ça stp ...
-> Penses à cocher la référence Microsoft DAO 3.6 Object Library ( Dans un module faites Outils / références )


Private Sub bt_A1_Click()
On Error Resume Next

Dim str As String
Dim Query As String
Dim db As DAO.Database, rst As DAO.Recordset

str = Me.Caption

' Ouverture de la base de données
Set db = CurrentDb

' Construction de la requête
Query = "SELECT box.nomBox, pc.nomPc, p.adressIpPc, etat.libEtat "
Query = Query & " FROM box, pc, etat "
Query = Query & " WHERE box.idBox = pc.idBox AND pc.idEtat = etat.idEtat AND box.nomBox = ' " & str & " ' "

' Ouverture du recordset
Set rst = db.OpenRecordset (Query , dbOpenForwardOnly, dbReadOnly)

' Fermeture du Recordset
rst.Close

If Err.Number <> 0 then
msgbox Err.Description
Exit Sub
End If

End Sub


Ensuite il faut parcourir le recordset pour lire les données.

Tiens moi au courrant stp.

Bon courage

Polux
1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
19 oct. 2007 à 14:36
bonjour,

tu récupères dans une variable string :

....

Dim str As String
Dim Query As String

str = monbouton.Caption

Query = "SELECT nom FROM pc WHERE nom = ' " & str & " ' "

....

Voilà

Bon courage

;o)
0
Bonjour Polux31,

Je viens d'essayer, mais le pb c'est qu'Access m'inscrit un message d'erreur : Microsoft Office Access can't find the object 'requête'.

Can you help me please?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
22 oct. 2007 à 12:27
salut, apparemment tu passes un objet 'requête' qu'Accces ne connait pas. Peux-tu mettre ici le code derrière ton bouton qui commande la requête, stp ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bien sûr,

Private Sub bt_A1_Click()
On Error GoTo Err_bt_A1_Click

Dim str As String
Dim Query As String

str = Me.Caption

Query = "SELECT box.nomBox, pc.nomPc, pc.adressIpPc, etat.libEtat" & _
"FROM etat INNER JOIN (box INNER JOIN pc ON box.idBox = pc.idBox) ON etat.idEtat = pc.idEtat" & _
"WHERE (((box.nomBox)='" & str & "'"

DoCmd.OpenQuery Query, , acReadOnly

Exit_bt_A1_Click:
Exit Sub

Err_bt_A1_Click:
MsgBox Err.Description
Resume Exit_bt_A1_Click

End Sub

Voici mon ami...
Merci pour ta rapidité
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
22 oct. 2007 à 13:20
merci, je ne peux pas me pencher sur le sujet cet aprem, je regarde ça ce soir. Je n'utilise que très rarement les formulaires directement sur Access, je développe sur VB6 ou Java avec des connections sur diverses bases.

As-tu fait un test avec un simple select (ex : "select * from box") ? pour voir si tu as un mesage d'erreur ?

A plus
0
Oui, je viens d'essayer, et toujours le même message d'erreur.
0
Salut Polux,

La référence était déjà cochée, par contre j'ai essayé ton code, et j'ai un autre message d'erreur : Object variable or With block variable not set.
Peux-tu aussi m'aiguiller sur la façon de parcourir le recordset STP?

Merci d'avance,

Fabinou
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
23 oct. 2007 à 13:26
salut,

Je ne vois pas le blème, fait ça, à tout hasard :

.....
' Ouverture du recordset
Set rst = new DAO.RecordSet
rst = db.OpenRecordset (Query , dbOpenForwardOnly, dbReadOnly)

....

Dans ton RecordSet tu as les données de ta requêtes. Dans ton cas :

leNomBox = rst.Fields(0).Value
leNomPC = rst.Fields(1).Value
lAdresseIpPc = rst.Fields(2).Value
leLibEtat = rst.Fields(3).Value

Pour passer à la ligne suivante : rst.MoveNext (pour lire l'enregistrement suivant) et rst.MovePrevious (pour lire l'enregistrement précédent).

Je suis désolé mais je ne peux pas faire de test sur les codes que je te passe, je n'ai pas Access installé sur mon pc ...
0
Je viens de remarquer quelques chose d'autre, lorsque je me positionne sur str = Me.Caption pendant le lancement, str est = à "".
Donc il ne prend pas, ou ne trouve pas le bouton !?
Quand dis-tu?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
23 oct. 2007 à 17:09
oups oula oui en effet, j'ai fait pas attention à ça.

str = Me.bt_A1.Caption

là tu devrais avoir quelque chose dans str.

Je pense qu'effectivement tu dois pouvoir passer ta variable à ta requête paramètrable.
0
Bonjour Polux,

Je pense avoir trouvé une solution à mon problème (grâce à toi bien sûr ;-)).

Mon but final étant qu'une CENTAINE de boutons puisse utiliser la même requête SQL, avec comme paramétre le nom du bouton.

Au départ, je ne savais pas comment exécuter ma requête en prenant en compte le nom du bouton sans passer par l'assistant d'access pour la création des requêtes, car je n'arrivais pas à passer en paramêtre le nom du bouton dans celle-ci. (faut suivre hein :-)).

Solution :
'Variable
Dim ReqSQL As String

'definition
ReqSQL = "SELECT box.nomBox, pc.nomPc "
ReqSQL = ReqSQL & " FROM box INNER JOIN pc ON box.idBox = pc.idBox "
ReqSQL = ReqSQL & " WHERE (((box.nomBox)=[forms]![nomDuFormulaire]![nomDuBouton].[caption])) "

'Création de la requête
CurrentDb.CreateQueryDef "testerReq", ReqSQL

'execution
DoCmd.OpenQuery "testerReq", acViewNormal, acReadOnly

--> Comme ça je peux faire une procédure avec ce code, et passer en paramètre le nom du bouton quand je clic dessus

Mon deuxième pb est que je ne peux pas créer deux fois la même requête. Alors je la supprime, avant de la re-créer avec le nouveau nom de bouton passé en paramètre dans la procédure.

Pense-tu que c'est une bonne solution ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
24 oct. 2007 à 13:53
salut, je ne pense pas qu'il soit nécessaire de détruite la requête puis la recréer ... Puisque tu as une variable dans le paramètrage de ta requête "testerReq" si j'ai bien compris... en principe tu ne devrais pas avoir besoin de l'assistant requête, mais si c'est une solution qui marche, pourquoi pas. L'essentiel c'est que tu obtiennes le résultat que tu cherches, peu importe comment en fin de compte. Je dois avoir Access 2007 ce week end, je vais pouvoir bidouiller dedans et faire des tests.

;o)
0
Dac, si jamais tu trouves une solution plus pratique à mon pb, fais moi un pti signe ;-)

En tout cas, merci pour ton aide,
A bientôt j'espère.
0
Coucou,

Oui, c'est vrai, dommage que tu n'as pas Access. Je viens d'essayer et j'ai toujours le même message d'erreur : Object variable or With block variable not set.

Et sinon, est-il possible de récupérer par exemple "leNomPC = rst.Fields(1).Value " et le donner à une requête paramétrable?
Car auparavant, j'utilisais un formulaire qui est lié à une requête paramétrable, cela me servant à changer le box d'un Pc, en y inscrivant le nom du Pc.
ex : Je clic sur le formulaire 'trouver un pc', une question apparait : "Quel Pc"
-> je rentre GOGOPC020, et je clic ok
-> cela me retourne le nom du pc avec le nom du box, que je peux modifier dans un combo box.

Merci pour ta patiente,

Fabinou
-1