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
    18 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2006
    Messages : 18 773
    Points : 143 538
    Points
    143 538

    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
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

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

  2. #2
    Membre expert
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    2 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 2 278
    Points : 3 863
    Points
    3 863

    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

  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
    18 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2006
    Messages : 18 773
    Points : 143 538
    Points
    143 538

    Par défaut

    Nom : Chapeau.jpg
Affichages : 24
Taille : 4,5 Ko

    Merci Guy !
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

    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
    18 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2006
    Messages : 18 773
    Points : 143 538
    Points
    143 538

    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 ?
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

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

  5. #5
    Membre expert
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    2 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 2 278
    Points : 3 863
    Points
    3 863

    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 ?

  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
    18 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2006
    Messages : 18 773
    Points : 143 538
    Points
    143 538

    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.
    Si vos yeux piquent à cause des fautes d'orthographe, c'est un don que vous pouvez exploiter en cliquant ici.

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

  7. #7
    Membre expert
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    2 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 2 278
    Points : 3 863
    Points
    3 863

    Par défaut

    C'est gentil Claude, mais ma contribution est loin d'égaler la tienne !!!
    quand même.

Discussions similaires

  1. Réponses: 20
    Dernier message: 19/11/2016, 23h32
  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, 09h47
  3. Réponses: 1
    Dernier message: 30/03/2012, 13h56
  4. Formulaire pour plusieurs critères dans une requète
    Par toniodelavega dans le forum IHM
    Réponses: 4
    Dernier message: 06/08/2010, 12h19
  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, 15h57

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