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.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 confirmé

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    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)
    @+

  3. #3
    Membre averti
    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
    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
    Membre averti
    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
    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 averti
    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
    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
    Membre averti
    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
    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 averti
    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
    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.

+ 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