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 SQL avec valeur d'une liste déroulante en critère


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Requête SQL avec valeur d'une liste déroulante en critère
    Bonjour à tous !

    Voilà tout est dans le titre, j'ai un problème avec une requête SQL que j'aimerai faire sur un Table, et prenant en critère ce qui est sélectionné dans une liste déroulante de mon formulaire.

    Voici ce que j'aimerais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = " SELECT * FROM Tb_congés WHERE mois = Me.liste.Column(0)  "
    simplement ... ça ne marche pas ^^

    Alors après plusieurs recherches, j'ai pu voir sur un site une réponse suivante à un sujet très similaire :

    " Bonjour
    Oui effectivement les requêtes avec le Qbe n'ont pas l'air de prendre la colonne en compte. Il prend en fait la colonne liée.
    Il faut donc contourner le problème.
    - Dans le formulaire avoir une zone de texte masquée qui aura comme source la colonne de la ListBox et qui sera mise à jour sur l'évènement "Après mise à jour" de la ListeBox. La requête aura donc la Zone de texte en critère.
    - Ou alors créer une fonction qui te renvoie la valeur de ta colonne et appeler cette fonction dans ta requête (plus élégant).
    "

    malheureusement encore ... aucune de ces 2 méthodes n'a marché pour moi.

    J'ai essayé pas mal d'écritures différentes pour cette requête, afin qu'elle prenne en compte ce qui est sélectionné dans ma liste déroulante, mais rien ni a fait.

    Soit Access me dit : expression non définie en parlant de Me.liste.Column(0)

    Soit il me sort une petite fenêtre me demandant d'entrer une valeur pour ce fameux champ et là ça fonctionne si je tape moi même le bon mois.


    Je n'ai plus de solutions sous la main ^^

    HELP

    Merci de vos réponses

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Et si on faisait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = " SELECT * FROM Tb_congés WHERE mois =" & Me.liste.Column(0)
    @+
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Salut

    Pour commencer, Il faut utiliser la bonne syntaxe lorsqu'on intègre un élément de formulaire dans l'expression d'une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ....WHERE monChamp = ' " & Me.liste.Column(0) & "'"
    Si ça ne marche pas avec les colonnes non-liées (ça m'étonne mais bon!), tu peux effectivement récuperer ta colonne voulue dans une textBox.

    Dans ce cas, sur l'évenement "Après MAJ" de ta liste tu mets:
    me.maTextBox = me.liste.column(0)
    et après tu refais ta clause WHERE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ......WHERE monChamp = '" & Me.monTextBox &"'"
    Si le contenu de ton champ n'est pas une chaine de caractère mais une valeur numérique, alors tu vire les simples cotes de part et d'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .......WHERE monChamp = " & Me.monTextBox

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour !

    Tout d'abord merci pour vos réponses

    Ensuite, j'ai essayé la totalité de ce que vous m'avez proposé et malheureusement ça ne fonctionne toujours pas. Voici les résultats, si ça peut vous éclairer :

    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ....WHERE monChamp = ' " & Me.liste.Column(0) & "'"
    J'ai un résultat, la création d'une Table ....vide. Alors que j'ai choisi le mois de Février et que ma Table de congés possède des lignes avec ce mois.

    Ensuite, j'ai essayé avec la TextBox, en respectant à la lettre les instructions et j'obtiens le même résultat : la création d'une Table vide.

    Enfin, avec ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = " SELECT * FROM Tb_congés WHERE mois =" & Me.liste.Column(0)
    j'obtiens un résultat différent : une fenêtre apparaît, me demandant la valeur de "Février" c'est à dire le mois que j'ai choisi, et si je retape Février, il me sort une Table avec les lignes concernant le mois de Février, comme je le souhaite.

    D'ailleurs, quel que soit le mois sur lequel je clique, la fenêtre sort, me demande la valeur de ce mois, et si je tape n'importe quel autre mois, j'obtiens le résultat escompté ( les lignes qui concernent le mois tapé à la main )

    Voilà ça semble bizarre mais je préfère vous donner tous les détails afin de comprendre.

    Je précise que le code qui permet d'afficher la Table de résultat de cette requête fonctionne très bien avec une autre base de données. il s'agit de ce code :

    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
    Dim SQL As String
    Dim dbs As Database
     
    Dim qdf As QueryDef
     
    SQL = "..." 
    Set dbs = CurrentDb()
     
    With dbs
    Set qdf = .CreateQueryDef("Congés_du_mois", SQL)
    DoCmd.OpenQuery "Congés_du_mois"
    .QueryDefs.Delete "Congés_du_mois"
    End With
    dbs.Close
    qdf.Close
    De +

    Je précise que tout ça est inclus dans un If, qui vérifie qu'on a bien saisi un mois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Me.liste.Column(0) = Null Then
     
    MsgBox " Choississez un mois "
     
    Else
    "code"

    ...

    avec le End if à la fin.


    Voilà j'espère que tout ces détails vous aideront à trouver la solution, car je dois avouer être un peu perdu ..

    Merci beaucoup

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Peut tu vérifier deja que ta requête est bonne en affichant le premier resultat dans un message:
    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
    'verification de la saisie du mois
        If Me.liste.Column(0) = "" Then    
    'déclaration des objets de la bibliothèque DAO
            Dim oRst As DAO.Recordset
            Dim oDb As DAO.Database
     
    'Affectation de l'objet Base de données et RecordSet pour executer une requête de selection
                Set oDb = CurrentDb
                Set oRst = oDb.OpenRecordset("SELECT * FROM Tb_congés WHERE mois ='" & Me.liste.Column(0)"';", dbOpenDynaset)        
    'Affichage du resultat
                MsgBox oRst.Fields(0).Value
     
    'Libération des objets
            oRst.Close
            oDb.Close
            Set oRst = Nothing
            Set oDb = Nothing
        End If
    Aux besoins fait un test avec la texBox plutôt que la liste dans le code.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Salut !

    le code fourni est incorrect syntaxiquement, enfin d'après mon compilo.

    Il me dit " séparateur de ligne ou ) attendu " précisément à l'endroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = oDb.OpenRecordset("SELECT * FROM Tb_congés WHERE mois ='" & Me.liste.Column(0)"';", dbOpenDynaset)
    Je n'arrive donc pas à tester

    désolé du peu de connaissance que j'ai en VBA, merci encore !

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Oups j'ai oublié un "&"

    on recommence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = oDb.OpenRecordset("SELECT * FROM Tb_congés WHERE mois ='" & Me.liste.Column(0) & "';", dbOpenDynaset)
    Sinon j'ai une question: es-tu sur que l'index de la colonne est bien 0 (s'agit il bien de la première?)
    Je te propose de faire un test en affichant tes colonnes dans un message (tu desactive le reste du script au besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Me.liste.Column (0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Me.liste.Column (1)
    etc.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci

    Alors, le code ne me met plus d'erreurs cette fois, mais n'affiche rien avec le recorset.

    Quand au Me.Liste.Column(0) dans le MsgBox : affiche bien le mois selectionné

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien SIG
    Inscrit en
    Mars 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SIG

    Informations forums :
    Inscription : Mars 2013
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Arrghh
    Je suis désolé, je ne vois pas ce qui ne marche pas, tu peux essayer ce qui tu avais imaginé au début en stockant la valeur de ta colonne cachée dans une textBox, et tu remanie le script en conséquence:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = oDb.OpenRecordset("SELECT * FROM Tb_congés WHERE mois ='" & Me.maTextBox & "';", dbOpenDynaset)
    Tu ne dois pas être très loin....il va te falloir l'avis d'un autre car moi je ne suis pas un expert...

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    D'accord je vais essayer ça

    Merci beaucoup pour tes réponses en tout cas, et oui je ne dois pas être très loin ...

    Mais là il me semble clair que c'est le SQL d'Access qui n'accepte pas les valeurs d'une liste déroulante ...je vais donc essayer par tous les moyens la méthode de contournement, avec soit un champ caché qui récupère ce qu'il faut, soit une fonction qui appelle cette valeur ....

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour à tous !

    Pour ceux que ça intéresse, mon problème est résolu !

    tout marche nikel avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = " SELECT * FROM Tb_congés WHERE mois = '" & Me.liste.value & "'"
    en faisant attention aux cotes et aux guillemets et notamment aux espaces.

    Respecter scrupuleusement cette écriture

    Merci à ceux qui se sont penchés sur le problème et à ceux qui on pris le temps de lire

  12. #12
    Membre à l'essai
    Femme Profil pro
    comptable
    Inscrit en
    Juillet 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : comptable
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour, j'ai la même demande, cependant, j'ai Access 2010, aussi je ne comprends pas la démarche que vous présentez.
    Pouvez vous m'aider?
    J'explique à nouveau mon problème :
    J'ai une requête par nom, un peu long de taper prénom+nom surtout lorsqu'on n'est pas sur de l'orthographe. j'ai bien un menu déroulant, mais je ne sais pas faire le lien entre ma requête et ce menu déroulant.
    Pouvez vous m'aider?
    Merci

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 34
    Points : 43
    Points
    43
    Par défaut
    Dim ta requete as string

    tarequete = "select [champs] from [table, requete]"
    Me.[tonMenuDeroulant].rowsource = [TaRequete]

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

Discussions similaires

  1. Requête paramétrée avec choix par une liste déroulante [AC2010]
    Par Nono32 dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 10/06/2015, 13h49
  2. Requête SQL et résultat dans une liste déroulante
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/04/2014, 14h02
  3. Réponses: 0
    Dernier message: 25/02/2008, 15h31
  4. Réponses: 7
    Dernier message: 19/05/2007, 11h33
  5. Réponses: 2
    Dernier message: 01/09/2006, 00h02

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