Rechercher : dans
Par :

Executer une requête via un bouton sou Access

Dernière réponse le 24 oct 2007 à 16:17:01 Fabinou, le 19 oct 2007 à 11:59:50 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Executer une requête via un bouton sou Access » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...
MySQL – Optimisation VoirL’optimisation au niveau de MySQL passe par trois composants, à savoir : Optimisation du serveur MySQL Optimisation de la base de données Optimisation des requêtes Optimisation de la configuration de serveur MySQL L’optimisation du serveur peut...

1

Polux31, le 19 oct 2007 à 14:36:01

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)

Répondre à Polux31

2

Fabinou, le 22 oct 2007 à 11:50:50

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?

Répondre à Fabinou

3

Polux31, le 22 oct 2007 à 12:27:13

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 ?

Répondre à Polux31

4

Fabinou, le 22 oct 2007 à 12:42:09

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é

Répondre à Fabinou

5

Polux31, le 22 oct 2007 à 13:20:00

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

Répondre à Polux31

6

Fabinou, le 22 oct 2007 à 13:25:45

Oui, je viens d'essayer, et toujours le même message d'erreur.

Répondre à Fabinou

7

Polux31, le 22 oct 2007 à 18:48:11

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

Répondre à Polux31

8

Fabinou, le 23 oct 2007 à 12:46:51

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

Répondre à Fabinou

9

Polux31, le 23 oct 2007 à 13:26:07

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 ...

Répondre à Polux31

10

Fabinou, le 23 oct 2007 à 16:06:23

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

Répondre à Fabinou

11

Fabinou, le 23 oct 2007 à 16:13:29

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?

Répondre à Fabinou

12

Polux31, le 23 oct 2007 à 17:09:20

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.

Répondre à Polux31

13

Fabinou, le 24 oct 2007 à 12:59:12

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 ?

Répondre à Fabinou

14

Polux31, le 24 oct 2007 à 13:53:44

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)

Répondre à Polux31

15

 Fabinou, le 24 oct 2007 à 16:17:01

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.

Répondre à Fabinou