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 :

La valeur d’un groupe d’options d’un formulaire comme critère dans une requête


Sujet :

Requêtes et SQL.

  1. #1
    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 : 78
    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 La valeur d’un groupe d’options d’un formulaire comme critère dans une requête
    Bonjour,

    Supposons d’une part une table (tStock) qui renseigne le stock par bouteille et d’autre part un formulaire (fBouteilles) avec un groupe d’options qui vaut de 0 à 2 selon le bouton coché.

    Le problème
    Dans une requête, sélectionner les enregistrements de tStock selon la valeur du groupe.
    J’ai tenté ceci :

    que Access convertit en
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tStock.Stock
    FROM tStock
    WHERE (((tStock.Stock)=IIf([Formulaires]![fBouteilles]![caStock]=0,0))) OR (((tStock.Stock)=IIf([Formulaires]![fBouteilles]![caStock]=1,([tStock].[Stock])<>0))) OR (((tStock.Stock)=IIf([Formulaires]![fBouteilles]![caStock]=2,[Stock])));

    Cette requête donne le bon résultat pour 0 et 2, mais elle ramène seulement les stocks à zéro pour la valeur 1.

    Où est l’os ? C’est la traduction du « <> 0 » en « ([tStock].[Stock])<>0) » dans le SQL qui fait problème.

    Après quelques heures d’acharnement, une solution pas « naturelle ».
    Au lieu de se référer directement à la table, on crée cette requête :

    Et cette fois, pour se référer au groupe d’options :

    que Access convertit en
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT rStock.tBouteillesFK, rStock.Stock
    FROM rStock
    WHERE (((rStock.VraiSIZero)=IIf([Formulaires]![fBouteilles]![caStock]=0,True))) OR (((rStock.VraiSIZero)=IIf([Formulaires]![fBouteilles]![caStock]=1,False))) OR (((rStock.VraiSIZero)=IIf([Formulaires]![fBouteilles]![caStock]=2,[VraiSIZero])));
    qui donne le bon résultat, mais le chemin est tortueux, donc difficile à expliquer dans un tutoriel...

    Quelqu’un connaît-il la syntaxe pour se référer directement à la colonne Stock ?

    Merci déjà.
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir Claude,
    je n'ai pas d'explication exacte à te donner, je soupçonne un problème au niveau de l'évaluation de ton expression que tu construis et qui doit retourner un booléen plutôt qu'une valeur à comparer. A mon sens, ce n'est pas la bonne méthode.
    Personnellement pour ce genre de comparaison, je passe toujours par des tests d'expressions qui vont me retourner un booléen (comme, finalement, tu as fais en passant par une requête) :
    - le stock est-il à 0 ?
    - le stock est-il différent de 0 ?
    - le stock est-il égal à lui-même ?
    que je compare ensuite au choix du formulaire : si choix = 0 alors Vrai, sinon Faux, ou si choix = 1 alors Vrai ....
    Je te joins une solution sans passer par une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tStock.Stock, [Stock]=0 AS 0, [stock]<>0 AS [<>0], [Stock]=[Stock] AS QQS, Val(Chr(Asc([Formulaires]![fBouteilles]![caStock]))) AS castock
    FROM tStock
    WHERE ((([Stock]=0)=IIf([Formulaires]![fBouteilles]![caStock]=0,True,False))) OR ((([stock]<>0)=IIf([Formulaires]![fBouteilles]![caStock]=1,True,False))) OR ((([Stock]=[Stock])=IIf([Formulaires]![fBouteilles]![caStock]=2,True,False)));
    Il y en a peut-être d'autres ...
    TstVinsTG.zip
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    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 : 78
    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
    Nom : Chapeau.jpg
Affichages : 436
Taille : 4,5 Ko

    Merci Guy !
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  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 : 78
    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
    Si j’ai bien compris, la colonne « castock » est là à titre purement informatif, pour afficher la valeur du groupe d’options : la requête que tu proposes donne le même résultat si je supprime cette colonne.
    Instinctivement, j’aurais écrit ceci pour afficher le contenu : Expr1: [Formulaires]![fBouteilles]![caStock]. J’ai essayé, le résultat n’est pas bon.

    Je voudrais comprendre pourquoi, il faut d’abord prendre la valeur ASCII pour pouvoir afficher le contenu.
    As-tu une explication ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour Claude,
    Je voudrais comprendre pourquoi, il faut d’abord prendre la valeur ASCII pour pouvoir afficher le contenu.
    je ne peux pas l'expliquer vraiment : peut-être cela est-il lié au type de contrôle utilisé dans un objet formulaire (on affiche la représentation graphique et pas la valeur), ou bien est-ce un bug ?
    C'est en voulant connaitre la valeur de castock en l'affichant dans la requête que j'ai constaté cette bizarrerie (c'est un réflexe lorsque je débogue, je montre tout ).

    Ayant constaté ce caractère bizarre à l'affichage, j'ai voulu connaitre sa valeur ASCII (autre réflexe de débogueur) qui me donnait 49 et qui correspond bien à 1 dans le tableau des codes ASCII. Je n'ai pas souvenir d'avoir déjà affiché la valeur d'un groupe d'options dans une requête et c'est peut-être pour cela que je n'ai jamais remarqué ce comportement auparavant.

    Si j’ai bien compris, la colonne « castock » est là à titre purement informatif
    En effet, je l'avais laissé volontairement pour que tu constates par toi-même ce phénomène.
    Peut-être que quelqu'un d'autre du forum pourra nous donner une explication plus convancante ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  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 : 78
    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
    Peut-être que quelqu'un d'autre du forum pourra nous donner une explication plus convancante ?
    Merci en tout cas pour ta participation et la pertinence de tes contributions sur ce forum.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    C'est gentil Claude, mais ma contribution est loin d'égaler la tienne !!!
    quand même.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

Discussions similaires

  1. Réponses: 20
    Dernier message: 19/11/2016, 22h32
  2. Critère dans une requête si une valeur existe affiche l'autre
    Par pasb71 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 11/08/2014, 08h47
  3. Réponses: 1
    Dernier message: 30/03/2012, 12h56
  4. Formulaire pour plusieurs critères dans une requète
    Par toniodelavega dans le forum IHM
    Réponses: 4
    Dernier message: 06/08/2010, 11h19
  5. [SQL]Utiliser une constante globale comme critère d'une requète ?
    Par marot_r dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/04/2007, 14h57

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