Executer une requête via un bouton sou Access

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

15 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  3. Fabinou
     
    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
  4. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Fabinou
     
    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
  7. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  8. Fabinou
     
    Oui, je viens d'essayer, et toujours le même message d'erreur.
    0
  9. Fabinou
     
    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
  10. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  11. Fabinou
     
    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
  12. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  13. Fabinou
     
    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
  14. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  15. Fabinou
     
    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
  16. Fabinou
     
    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