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

IHM Discussion :

Critère de sélection dans une requête. Référence au contrôle d'un formulaire.


Sujet :

IHM

  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 : 282 192
    Points
    282 192
    Par défaut Critère de sélection dans une requête. Référence au contrôle d'un formulaire.
    Bonjour,

    Dans mon critère, je voudrais faire référence au contenu du contrôle d’un formulaire.
    Concrètement j’ai ceci




    Quand le contrôle contient une valeur, je voudrais que la requête me ramène les enregistrements de la table pour lesquels LaColonne vaut cette valeur.
    Par contre, si le contrôle est Null, je voudrais ramener tous les enregistrements




    La syntaxe du critère devrait être



    Mon problème : comment exprimer « Je les voudrais tous » ?

    Si j’écris [LaColonne], je ne ramène pas l’enregistrement N° 3.

    Dans une requête construite à la main, pour les ramener tous, je ne mettrais pas de critère ou alors
    « [LaColonne] Ou Est Null ».

    Mais :



    N.B. Dans le cas qui m'occupe, la table a une dizaine de colonnes qui chacune se réfère à son contrôle sur le formulaire.

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

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonjour,

    Peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TestPK, LaColonne
               FROM Test
    WHERE (LaColonne)=IIf([Formulaires]![UnFormulaire]![txtReference] Is Not Null
               Or 
    [Formulaires]![UnFormulaire]![txtReference]<>"",[Formulaires]![UnFormulaire]![txtReference],[LaColonne]);
    Voir plus léger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TestPK,LaColonne
               FROM Test
    WHERE (LaColonne)=Nz([Formulaires]![UnFormulaire]![txtReference],[LaColonne]);
    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  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 : 282 192
    Points
    282 192
    Par défaut
    Bonjour francishop,

    Merci pour ton intervention : c'est toujours un plaisir de te croiser !

    J'avais déjà essayé la solution que tu proposes (ça fait deux jours que je m'acharne sur ce truc !).
    Hélas, tes deux requêtes ne ramènent pas les enregistrements qui ont la valeur Null dans LaColonne.
    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 !

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonjour Claude,

    . test_Leloup.7z

    Cordialement
    Fichiers attachés Fichiers attachés
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  5. #5
    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 : 282 192
    Points
    282 192
    Par défaut
    Francis,

    J'utilise encore et toujours Access2000, je ne peux lire ton fichier !

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

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Re,

    Pour voir si ton souci se promène par-là, essaie de mettre sur "LaColonne" Chaîne vide autorisée => Oui

    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  7. #7
    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 : 282 192
    Points
    282 192
    Par défaut
    J’ai pu installer provisoirement Access2010 et ainsi regarder ta proposition.
    Élégant ce



    … mais cela ne fonctionne pas chez moi !
    J’ai pourtant adapté Chaîne vide autorisée comme tu me l’as suggéré.



    Quelque chose m’échappe :
    C’est comme si en Access2010 la comparaison d’un champ Null avec lui-même donne OUI alors qu’en Access2000, cela donne Non.
    Ou bien il y a une astuce quelque part ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour à tous,

    Je propose d'utiliser la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TestPK, LaColonne
    FROM Test
    WHERE LaColonne Like Nz([Formulaires]![UnFormulaire]![txtReference],"*")
    "Always look at the bright side of life." Monty Python.

  9. #9
    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 : 282 192
    Points
    282 192
    Par défaut
    Bonjour micniv,

    Merci.

    Toi aussi, tu es en Access2010 ?

    Chez moi, ça reste pareil

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

  10. #10
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Oui Claude je suis en ACC2010 au travail et j'ai aussi ACC2003 chez moi. J'ai oublié 2000 ...
    "Always look at the bright side of life." Monty Python.

  11. #11
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Alors sous 2000, tu peux encore essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT TestPK, LaColonne
    FROM Test
    WHERE LaColonne Like IIF( len(Nz([Formulaires]![UnFormulaire]![txtReference]) )>0   ,[Formulaires]![UnFormulaire]![txtReference],"*");
    ca marche toujours bien sous 2010
    "Always look at the bright side of life." Monty Python.

  12. #12
    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 : 282 192
    Points
    282 192
    Par défaut
    Non, c'est le même problème : les enregistrements où LaColonne est Null ne sont pas ramenés.

    Je me demande s'il n'y a pas une option quelque part.

    Je lis par exemple ceci pour sql serveur :




    Comparaison de valeurs NULL

    --------------------------------------------------------------------------------



    Attention aux comparaisons de valeurs NULL. Le comportement de la comparaison dépend de la valeur de l'option SET ANSI_NULLS.

    Si SET ANSI_NULLS a la valeur ON et si vous effectuez une comparaison avec une ou plusieurs expressions NULL, le résultat ne sera ni TRUE ni FALSE, mais UNKNOWN. Une valeur inconnue (UNKNOWN) ne peut pas être logiquement comparée à une autre valeur. Ceci se produit si une expression est comparée au littéral NULL ou si deux expressions sont comparées et que l'une d'elles correspond à la valeur NULL.

    Mais j'ignore s'il y a quelque chose d'équivalent en Access(2000).

    En tout cas,

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

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Salut Claude

    Je pense que le problème vient du caractère joker (*) car à priori celui-ci ne gère pas les champs null, il faut qu'il y ait une valeur.

    A mon avis il va falloir passer peut-être par une requête Union pour récupérer le resultat du filtre et la valeur null, donc tout en VBA pour récupérer les infos et les afficher.

    Philippe

  14. #14
    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 : 282 192
    Points
    282 192
    Par défaut
    Merci Philippe d’intervenir ici.
    J’ai aussi pensé à cette voie, mais étant donné que j’ai une dizaine de colonnes à filtrer, toutes susceptibles de contenir des Null, je vais devoir unir une dizaine de requêtes. Toutes faciles à écrire il est vrai.
    De plus, il s’agit d’un formulaire polyvalent qui permet l’encodage traditionnel et qui sert aussi à des recherches multicritères la requête union ne pourra plus me servir de source (puisque non modifiable). Qu’à cela ne tienne, je prendrai comme source une requête supplémentaire qui ne reprendra que les enregistrements dont la clé est contenue dans l’union.
    Ce n’est pas un problème, mais c’est quand même rudement plus lourd que ce que proposent Francishop et micniv (regarde la pièce jointe par Francishop), je voudrais comprendre pourquoi chez eux ça marche et pas chez moi.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonjour Bonsoir... A cette heure, je ne sais plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TestPK, LaColonne
                 FROM Test
    WHERE ((LaColonne)=[Forms]![UnFormulaire]![txtReference] 
                 Or 
    [Forms]![UnFormulaire]![txtReference] Is Null);
    Cordialement
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  16. #16
    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 : 282 192
    Points
    282 192
    Par défaut
    Merci Francis, j’ai compris mon erreur.

    En fait, j’avais déjà essayé ce que tu proposes ici, mais je le traduisais mal avec le QBE (il y a de nombreuses colonnes).

    Voici comment, j’aurais dû faire :
    D’abord écrire le critère de la première colonne et le recopier en modifiant ce qu’il faut dans les autres colonnes



    Si j’enregistre cette requête, à l’ouverture suivante le QBE se présente comme ceci




    Access génère alors le SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Test.TestPK, Test.Col1, Test.Col2, Test.Col3
    FROM Test
    WHERE (((Test.Col1)=[Formulaires]![UnFormulaire]![RefCol1]) AND ((Test.Col2)=[Formulaires]![UnFormulaire]![RefCol2]) AND ((Test.Col3)=[Formulaires]![UnFormulaire]![RefCol3])) OR (((Test.Col2)=[Formulaires]![UnFormulaire]![RefCol2]) AND ((Test.Col3)=[Formulaires]![UnFormulaire]![RefCol3]) AND (([Formulaires]![UnFormulaire]![RefCol1]) Is Null)) OR (((Test.Col1)=[Formulaires]![UnFormulaire]![RefCol1]) AND ((Test.Col3)=[Formulaires]![UnFormulaire]![RefCol3]) AND (([Formulaires]![UnFormulaire]![RefCol2]) Is Null)) OR (((Test.Col3)=[Formulaires]![UnFormulaire]![RefCol3]) AND (([Formulaires]![UnFormulaire]![RefCol1]) Is Null) AND (([Formulaires]![UnFormulaire]![RefCol2]) Is Null)) OR (((Test.Col1)=[Formulaires]![UnFormulaire]![RefCol1]) AND ((Test.Col2)=[Formulaires]![UnFormulaire]![RefCol2]) AND (([Formulaires]![UnFormulaire]![RefCol3]) Is Null)) OR (((Test.Col2)=[Formulaires]![UnFormulaire]![RefCol2]) AND (([Formulaires]![UnFormulaire]![RefCol1]) Is Null) AND (([Formulaires]![UnFormulaire]![RefCol3]) Is Null)) OR (((Test.Col1)=[Formulaires]![UnFormulaire]![RefCol1]) AND (([Formulaires]![UnFormulaire]![RefCol2]) Is Null) AND (([Formulaires]![UnFormulaire]![RefCol3]) Is Null)) OR ((([Formulaires]![UnFormulaire]![RefCol1]) Is Null) AND (([Formulaires]![UnFormulaire]![RefCol2]) Is Null) AND (([Formulaires]![UnFormulaire]![RefCol3]) Is Null));
    À votre santé !

    Ceci pour trois colonnes, en réalité, il y en a une dizaine avec des noms plus compliqués que Col1, Col2…

    Mon erreur a été d’essayer d’adapter la requête, colonne après colonne.

    Je suis maintenant dépanné, mais les solutions Access2010 proposées aux billets 4 (francishop) et 8 (micniv) restent pour moi une énigme.

    Merci à tous.

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

  17. #17
    Invité
    Invité(e)
    Par défaut
    Belle requête, à ajouter dans les annales

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonjour,
    Citation Envoyé par ClaudeLELOUP Voir le message
    Je suis maintenant dépanné, mais les solutions Access2010 proposées aux billets 4 (francishop) et 8 (micniv) restent pour moi une énigme.
    En ce qui me concerne,(Access 2003), il m'a fallu du temps avant d'en trouver la raison.
    Mettre "123" ou "abc" et l'effacer = Nenni à l'affichage. Mettre "" et l'effacer = OK à l'affichage.

    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  19. #19
    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 : 282 192
    Points
    282 192
    Par défaut
    Bonjour Francis,

    Effectivement, je viens de faire l'expérience.

    Mais dans ce cas la valeur n'est plus Null !




    C’est ça la clé de l’énigme : dans ton exemple, la colonne est Empty et non pas Null !
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  20. #20
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonsoir,
    J'ai trouvé très 'intéressante' la découverte ci-dessous :
    (c.à.d effacer un champ vide provoque un résultat différent que effacer un champ rempli)

    Sous access2003 cette requete capte toutes les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TestPK, LaColonne, len(lacolonne) AS LEN, isempty(lacolonne) AS EMPTY, isnull(lacolonne) AS NULLOS
    FROM Test
    WHERE nz(LaColonne) like Nz([Formulaires]![UnFormulaire]![txtReference], "*")
    ... enfin correctement réinitialisée, curieux.
    A+
    "Always look at the bright side of life." Monty Python.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Activer ou non un critère de sélection dans une requête
    Par benoistv dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 14/10/2014, 19h10
  2. Critère de sélection dans une requête
    Par tibo894 dans le forum Développement
    Réponses: 2
    Dernier message: 23/09/2011, 11h30
  3. Réponses: 4
    Dernier message: 22/02/2008, 10h02
  4. Sélection dans une requête
    Par tinose dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/02/2008, 08h36
  5. Critère ET / OU dans une requête
    Par Nessie37 dans le forum IHM
    Réponses: 8
    Dernier message: 25/07/2007, 16h26

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