IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête pilotée par zone de liste [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Requête pilotée par zone de liste
    Bonjour à tous,

    Je recherche de l'aide sur un point au sujet duquel je ne crois pas avoir trouvé de post sur le forum.

    Pour planter le décors, je gère une liste principale que je vais appeler [Table].

    Pour faire un extract de certains éléments de cette table je fais une sélection d'enregistrements en remplissant une zone de liste [ListeSelection] qui pointe un champs particulier de [Table].

    De là, je voudrais faire une requête récupérant les enregistrements de [Table] correspondant aux éléments listés dans [ListeSelection].

    Lorsque je paramètre le champs de ma requête en pointant sur ma zone de liste (dans critère), je ne récupère que l'enregistrement qui correspond au critère sélectionné dans ma zone de liste.
    Par contre, je n'arrive pas à commander la requête pour extraire les enregistrements correspondant à tous les éléments de ma zone de liste.

    Il y a surement une subtilité dans l'écriture du code à mettre dans le critère de ma requête, mais là, je cale.

    Si quelqu'un peut éclairer ma lanterne, je suis preneur

    Merci d'avance pour votre aide.

    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    cela dépend de la propriété contenu de ta zone de liste.
    Est-ce une requête ou une liste séparée par des points-virgules ?

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    et bien en fait, il n'y a rien dans la propriété contenu de cette zone de liste puisque son contenu est variable.

    En fait, dans mon programme, je pars d'une liste vide et en fonction des éléments que je choisi dans la liste [Table], je rempli la zone de liste [ListeSelection].

    Ensuite, une fois [ListeSelection] remplie des éléments que je souhaitais sélectionner, je veux pouvoir sortir une requête qui a comme critère de filtrage tous les éléments présents dans [ListeSelection].

    Le problème est que [ListeSelection] a un contenu dynamique (j'entends par là qu'il varie et n'est pas paramétré à l'avance). C'est là qu'est l'os, puisque je ne sais pas comment paramétrer ma requête pour utiliser le contenu global (c'est à dire tous les éléments) de ma zone de liste.

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Cette requête, veux-tu qu'elle soit permanente ? Ou peux-tu la construire au moment où tu connais les valeurs du contenu de ta zone de liste ?

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Et bien, je n'ai pas besoin qu'elle soit permanente.
    L'idée est de pouvoir l'exporter ponctuellement.

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Donc, il suffit d'en construire le sql dès l'instant que tu connais les composantes de la zone de liste.

    A l'aise avec le code ? Ou besoin d'un coup de main ?

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Besoin d'un coup de main !

    Surtout pour le code SQL, parce que c'est LE point que je ne maitrise pas particulièrement dans l'exercice.

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Lorsque je paramètre le champs de ma requête en pointant sur ma zone de liste

    Poste le sql de cette requête.

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Voila le SQL de ma requête, sans le filtrage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT [Table].[Serial Number], 
    [Table].[Customer Rank], 
    [Table].Type, 
    [Table].Version, 
    [Table].Customer
    FROM [Table];
    L'idée étant que je filtre [Table] avec les éléments de la zone de liste[ListeSelection] qui eux correspondent à certains éléments du champs [Table].[Customer Rank]

    Voila

  10. #10
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    J'attendais la requête qui fait référence au contrôle du formulaire.
    J'ai besoin du nom du formulaire et du nom du contrôle zone de liste.

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Ah pardon,

    Oui alors mon formulaire s'appelle [ImprimCRDebrief] et la zone de liste [ListeSelection].

    Initialement, j'avais mis cette requête en SQL après le paramétrage habituel au début :
    ..........
    WHERE ((([Table].[Customer Rank])=[Formulaires]![ImprimCRdebrief]![ListeSelection]));

    Avec ce code, seul l'élément sélectionné est dans la requête. Dans mon cas, je voudrais tous les éléments de la zone de liste (si c'est possible ? )

  12. #12
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Quel est le type (texte, numérique, date ?) de [Customer Rank] ?

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    C'est un champs texte (STRING)

  14. #14
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    1° copie n'importe quelle requête et baptise la copie "rSouhaitee".

    2° dans ton formulaire, ajoute un bouton "btConstriure"
    Voici le code que tu dois associer au clic du bouton :

    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
    16
    17
    18
    19
    Private Sub BtConstruire_Click()
    Dim liste() As String, i As Integer, sql As String, ClauseWhere As String, q As QueryDef
    sql = "SELECT [Serial Number], [Customer Rank], [Type], [Version], [Customer] FROM [Table] WHERE "
    'récupération des valeurs de la zone de liste
    liste = Split(Me.ListeSelection.RowSource, ";")
    'construction de la clause where
    For i = 0 To UBound(liste)
       ClauseWhere = ClauseWhere & "[Customer Rank]=" & liste(i) & " or "
    Next i
    'Assemblage du sql final
       'suppression du dernier or
    ClauseWhere = Left(ClauseWhere, Len(ClauseWhere) - 3)
       'sql + where + ";" final
    sql = sql & ClauseWhere & ";"
    'Adapter le sql de la requête souhaitée.
    Set q = CurrentDb.QueryDefs("rSouhaitee")
    q.sql = sql
    Set q = Nothing
    End Sub
    ---> ouvre la requête "rSouhaitee" pour vérifier le résultat.

    Les commentaires devraient t'aider à comprendre ce qui s'y passe.
    Saches aussi que si tu places le curseur au milieu d'un mot-clé et que tu enfonces <F1> l'aide Access s'ouvre à la bonne page.

    Reviens si problème.

    Ps quand tu auras un peu de temps lis ceci :

    - conventions typographiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://argyronet.developpez.com/office/vba/convention/
    pour les noms que tu donnes aux contrôles et objets.

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    C'est presque ça !
    En fait, ce code me récupère bien le contenu de la zone de liste, mais il génère une commande SQL avec des crochets [] pour les éléments de la liste alors que je pense qu'il faudrait que ce soit des guillemets " ". En effet, avec les crochets, il recherche le contrôle qui se nomme ainsi alors qu'il faut qu'il trie le contenu.

    Et là, je ne sais pas comment il faut le taper en vba, au niveau de la ligne

    ClauseWhere = ClauseWhere & "[Customer Rank]=" & liste(i) & " or "

  16. #16
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Mon code ,n'ajoute pas de crochets.
    Dans "contenu" de ta zone de liste, je m'attends à trouver quelque chose comme " "a";"c" " (puisque texte). J'ai testé avant de te donner ma réponse.
    Qu'as-tu dans contenu ?

  17. #17
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    et bien lorsque je regarde le contenu de la zone liste si des éléments sont intégrés, j'ai a;b;c et non "a","b","c"

    Je viens de percuter que c'est ce que tu m'a demandé au tout début.....mais en fait, je n'avais pas vu qu'on pouvais visualiser les propriétés de l'élément à chaud, pendant que le formulaire tourne....

  18. #18
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Dans ce cas, un chouia différent :

    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
    16
    17
    18
    19
    Private Sub BtConstruire_Click()
    Dim liste() As String, i As Integer, sql As String, ClauseWhere As String, q As QueryDef
    sql = "SELECT [Serial Number], [Customer Rank], [Type], [Version], [Customer] FROM [Table] WHERE "
    'récupération des valeurs de la zone de liste
    liste = Split(Me.ListeSelection.RowSource, ";")
    'construction de la clause where
    For i = 0 To UBound(liste)
       ClauseWhere = ClauseWhere & "[Customer Rank]=""" & liste(i) & """ or "
    Next i
    'Assemblage du sql final
       'suppression du dernier or
    ClauseWhere = Left(ClauseWhere, Len(ClauseWhere) - 3)
       'sql + where + ";" final
    sql = sql & ClauseWhere & ";"
    'Adapter le sql de la requête souhaitée.
    Set q = CurrentDb.QueryDefs("rSouhaitee")
    q.sql = sql
    Set q = Nothing
    End Sub

  19. #19
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    YES !!!

    Ca marche nickel.

    En fait, il me fallait juste un peu d'aide sur le code SQL.

    Merci pour le support Claude !

    C'est top.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête sur une zone de liste
    Par manguigs dans le forum IHM
    Réponses: 1
    Dernier message: 24/01/2010, 22h50
  2. [AC-2003] Remplissage champs texte par zone de liste déroulante
    Par VBchris dans le forum Access
    Réponses: 0
    Dernier message: 18/09/2009, 09h43
  3. Réponses: 3
    Dernier message: 14/04/2009, 14h40
  4. Remplacer doublons lignes par zone de liste
    Par toto10 dans le forum Access
    Réponses: 5
    Dernier message: 13/07/2006, 12h19
  5. Critère de requête avec une zone de liste dans un formulaire
    Par Dehez dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2006, 12h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo