IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

informer

Access - Liste déroulante alimentée par une requête stockée paramétrée

Noter ce billet
par , 05/05/2018 à 08h00 (1326 Affichages)
Suite à un post, j'ai proposé cette solution pour alimenter des listes déroulantes.

Pour illustrer l’explication, un exemple est téléchargeable.

Il faut créer des requêtes stockées paramétrées qui seront affectées dynamiquement à la liste sur l’événement CHANGE de la liste déroulante précédente.

Prenons le cas de Pays dont le recordSource est

Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT THE_MOD.MOD_COD, StrConv([MOD_LIB],3) AS PAY FROM (TBL_ETU INNER JOIN TBL_PRO ON TBL_ETU.ETU_CLE = TBL_PRO.ETU_CLE) INNER JOIN ((TBL_PRO_STR INNER JOIN THE_MOD ON TBL_PRO_STR.PRO_STR_PAY = THE_MOD.MOD_COD) INNER JOIN TBL_PRO_STR_CEN ON TBL_PRO_STR.PRO_STR_CLE = TBL_PRO_STR_CEN.PRO_STR_CLE) ON TBL_PRO.PRO_CLE = TBL_PRO_STR.PRO_CLE WHERE (((TBL_ETU.ETU_CLE)=Forms!FRM_PRO_STR_CEN!ETU) And ((THE_MOD.VAR_CLE)=6)) GROUP BY THE_MOD.MOD_COD, StrConv([MOD_LIB],3);
On crée une requête stockée paramétrée qryPays dont le code est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
PARAMETERS pETUDE Long;
SELECT THE_MOD.MOD_COD, StrConv([MOD_LIB],3) AS PAY
FROM (TBL_ETU INNER JOIN TBL_PRO ON TBL_ETU.ETU_CLE = TBL_PRO.ETU_CLE) INNER JOIN ((TBL_PRO_STR INNER JOIN THE_MOD ON TBL_PRO_STR.PRO_STR_PAY = THE_MOD.MOD_COD) INNER JOIN TBL_PRO_STR_CEN ON TBL_PRO_STR.PRO_STR_CLE = TBL_PRO_STR_CEN.PRO_STR_CLE) ON TBL_PRO.PRO_CLE = TBL_PRO_STR.PRO_CLE
WHERE (((TBL_ETU.ETU_CLE)=pETUDE) And ((THE_MOD.VAR_CLE)=6))
GROUP BY THE_MOD.MOD_COD, StrConv([MOD_LIB],3);
Puis sous l'événement CHANGE de la liste déroulante Etude (dans mon exemple lstEtude), on écrit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub lstEtude_Change()

   With CurrentDb.QueryDefs("qryPays")
        .Parameters("pETUDE") = Me.lstEtude.Value
        Set Me.lstPays.Recordset = .OpenRecordset
        .Close
    End With
    
    On Error Resume Next ´——> pour éviter le message d’erreur si pas d’items dans la liste
    With Me.lstPays
        .SetFocus
        .ListIndex = 0
    End With
    
End Sub
Source ICI

Pour initialiser la liste déroulante des études à l'ouverture du formulaire, écrire sous l'événement LOAD du formulaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Private Sub Form_Load()
    
    On Error Resume Next
    With Me.lstEtude
        .SetFocus
        .ListIndex = 0
    End With

End Sub
On réplique le même méthode pour les requêtes des autres listes en y ajoutant les paramètres complémentaires et le tour est joué !

Une solution parmi tant d’autres, bien sûr.
Miniatures attachées Fichiers attachés

Envoyer le billet « Access - Liste déroulante alimentée par une requête stockée paramétrée » dans le blog Viadeo Envoyer le billet « Access - Liste déroulante alimentée par une requête stockée paramétrée » dans le blog Twitter Envoyer le billet « Access - Liste déroulante alimentée par une requête stockée paramétrée » dans le blog Google Envoyer le billet « Access - Liste déroulante alimentée par une requête stockée paramétrée » dans le blog Facebook Envoyer le billet « Access - Liste déroulante alimentée par une requête stockée paramétrée » dans le blog Digg Envoyer le billet « Access - Liste déroulante alimentée par une requête stockée paramétrée » dans le blog Delicious Envoyer le billet « Access - Liste déroulante alimentée par une requête stockée paramétrée » dans le blog MySpace Envoyer le billet « Access - Liste déroulante alimentée par une requête stockée paramétrée » dans le blog Yahoo

Mis à jour 02/06/2018 à 09h25 par informer

Catégories
Sans catégorie

Commentaires