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 :

[SQL] recherche multicritères --> affichage de mauvais enregistrements


Sujet :

Requêtes et SQL.

  1. #1
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut [SQL] recherche multicritères --> affichage de mauvais enregistrements
    Bonjour, et merci à ceux qui me reprondront

    Alors voilà, j'ai un formulaire de recherche multicritère, je n'ai pas de problème pour créer les requètes. J'ai un critère qui est le créneau horaire (donc de 1 à 24) que je choisit avec une liste déroulante.
    Le problème se pose au niveau de l'affichage : quand je choisit 2 par exemple il m'affiche les résultats dont le créneau horaire est 2, 12, 20, 21, 22, 23, 24....

    J'ai essayé en mettant un 0 devant les chiffres seuls mais Access ne l'accepte pas.

    Est ce que quelqu'un sait comment remédier à ce problème ?

    Merci
    ~ Lola ~

  2. #2
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Salut,

    j'imagine que tu t'es inspirée du tutoriel de caféine. En tout cas, si tu passes par la construction dynamique de ton instruction SQL avec la clause WHERE spécifique à ton filtre, il faut que tu repères la ligne de code qui construit le critère pour le champ stockant la valeur du créneau horaire.
    En effet actuellement, tu dois avoir quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "NomChampCréneauHoraire Like '*" & ValeurCritère & "*'"
    C'est à dire que tu traites ton champ comme une chaine de caractère sur laquelle tu fais une recherche partielle grâce au *.
    Or il serait plus juste de traiter ton champ comme un champ numérique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "NomChampCréneauHoraire =" & ValeurCritère
    (\ _ /)
    (='.'=)
    (")-(")

  3. #3
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Merci de ta réponse,
    en effet je me suis inspirée du tutoriel de cafeine.
    Alors j'ai fait le changement que tu m'as dit, mais maintenant aucun enregistrement n'apparait dans la zone de liste de résultats., voilà une partie du code avec ta modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Me.Créneau And Not Me.Année And Not Me.Mois Then
        Sql = "SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Heure =  & Me.ValeurCréneau "
    End If
    Si tu as d'autres idées je suis preneuse...
    ~ Lola ~

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    je tente ma première réponse (me tapez pas )
    dans mon cas je traite la variable comme une chaîne de caractère
    ce qui est moins bien que la solution de Fred

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Me.Créneau And Not Me.Année And Not Me.Mois Then
    SQL = "SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Heure Like ' " & Me.ValeurCréneau & " ' "
    End IF
    j'espère que cela marchera (autrement la honte pour moi)

  5. #5
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Tu n'as pas bien repris mon exemple, essai comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Sql = "SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Heure ="  & Me.ValeurCréneau
    Examine bien la position du dernier guillemet ". Tel que tu l'avais placé, tu n'assignais à la variable Sql qu'une simple chaine de caractère incluant la valeur littérale " & Me.ValeurCréneau" alors que "& Me.ValeurCréneau" est bien entendu du code.
    (\ _ /)
    (='.'=)
    (")-(")

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Merci ça marche,
    la solution de FRED.G est la bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Me.Créneau And Not Me.Année And Not Me.Mois Then
        Sql = "SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Heure = " & Me.ValeurCréneau
    End If
    Merci de m'avoir aidée...
    ~ Lola ~

  7. #7
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Désolé mais ça ne marche que s'il y a une seule liste de valeur,
    j'ai essayé de faire avec deux mais aucun résultat ne s'affiche..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Me.Créneau And Not Me.Année And Me.Mois Then
        Sql = "SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Mois = " & Me.ValeurMois & " AND CRENEAU_HORAIRE!Heure = " & Me.ValeurCréneau
    End If
    Je suis désolée de vous embeter encore, mais comment cela se fait-il que je ne puisse faire qu'avec une seule liste de choix ?
    ~ Lola ~

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    je retente (je sens que je fais encore me faire casser)
    ma méthode n'est certainement pas la meilleure mais je pense quel peut te dépanner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF Me.Créneau AND NOT Me.Année AND Me.Mois Then
     Sql = "SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Mois like ' " & Me.ValeurMois & " ' AND CRENEAU_HORAIRE!Heure like ' " & Me.ValeurCréneau &" ' " 
    End IF

  9. #9
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Ca ne marche pas, tout à l'heure j'avais essayé et ca ne marchait pas, j'ai du mal envoyer le post qui le disait...

    Moi au début j'avais quelque chose du même style que toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CRENEAU_HORAIRE!Mois like '*" & Me.ValeurMois & "*'
    Alors peut-être que tu as d'autres idées...
    ~ Lola ~

  10. #10
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Le Like est à utiliser pour des recherches partielles sur des champs de type String. Mais si le champ est d'un type numérique alors on n'utilise pas le Like mais l'un des opérateurs =, <, >, etc.

    Ensuite, le problème peut venir de la valeur renvoyée par ton contrôle permettant de définir le critère Mois... Vérifie qu'elle valeur est renvoyée en mettant par exemple un point d'arrêt sur la ligne qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF Me.Créneau AND NOT Me.Année AND Me.Mois Then
    Ainsi tu pourras vérifier toutes les valeurs nécessaires.
    Par exemple, après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF Me.Créneau AND NOT Me.Année AND Me.Mois Then
     Sql = "SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Mois like ' " & Me.ValeurMois & " ' AND CRENEAU_HORAIRE!Heure like ' " & Me.ValeurCréneau &" ' " 
    End IF
    Ajoute : Puis donne nous le résulat affiché dans la fenêtre de débogage après éxécution du code.
    (ctrl+g pour afficher la fenêtre de débogage dans VBE).
    (\ _ /)
    (='.'=)
    (")-(")

  11. #11
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Alors j'ai fais tout ça mais ça ne marche pas, mais ça a changé, avant le nom des champs ne se mettait pas, ici ils apparaissent mais toujours pas d'enregistrements...

    Voilà ce qui est affiché dans la fenêtre de débogage :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Heure = ;
    SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Heure = 5;
    SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Mois like ' ' AND CRENEAU_HORAIRE!Heure like ' 5 ' ;
    SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE CRENEAU_HORAIRE!Mois like ' 2 ' AND CRENEAU_HORAIRE!Heure like ' 5 ' ;

    Voilà ma base de données, ça expliquera mieux mon problème :Pièce jointe 13743
    ~ Lola ~

  12. #12
    Membre chevronné Avatar de Renardo
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 648
    Points : 2 019
    Points
    2 019
    Par défaut
    Desoler je me suis trompe de personne

  13. #13
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Rebonjour,

    Alors j'ai essayé de faire comme on m'a dit mais ça ne marche pas. En fait je pense que je vais revenir à la première solution mais il y aura un problème au niveau des mois comme il y en a eu un au niveau des heures.
    Le problème c'est que je dois faire la même chose pour une autre base de données, c'est la même avec en plus les jours qui sont précisés, alors svp est ce que quelqu'un a une solution, un tutoriel ou un lien pour que je puisse au moins chercher.....

    Je vais tout refaire du début peut-être que je trouverai une autre solution...
    ~ Lola ~

  14. #14
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Alors j'ai mis des parenthèses car en fouillant sur internet j'ai constaté qu'on le conseillait, et voilà ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Me.Créneau And Not Me.Année1 And Me.Mois1 Then
        Sql = "SELECT NuméroAuto, Année, Mois, Heure, Taux, Transaction FROM CRENEAU_HORAIRE WHERE ( CRENEAU_HORAIRE!Mois = " & Me.ValeurMois1 & " ) AND  CRENEAU_HORAIRE!Heure = " & Me.ValeurCréneau & ""
    End If
    Maintenant je complique un peu les choses et je vais mettre une période de fin en plus, si j'y arrive alors je mettrais résolu sinon je risque d'avoir besoin de vos lumières.

    En tout cas merci à tous ceux qui ont voulu m'aider...
    ~ Lola ~

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

Discussions similaires

  1. [SQL] recherche multicritère SQL et checkbox
    Par berti dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/03/2008, 17h34
  2. [SQL] Recherche dans table le nombre d'enregistrement en horizontale
    Par Dsphinx dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/04/2007, 07h18
  3. [SQL] Recherche multicritères
    Par denn dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/05/2006, 17h42
  4. [SQL] recherche multicritère
    Par nal dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 11/04/2006, 11h26
  5. [SQL] Recherche multicritères genération de la requête
    Par primus dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/02/2006, 16h34

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