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 :

Form recherche : enregistrements avec champs vide manquants [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 17
    Points
    17
    Par défaut Form recherche : enregistrements avec champs vide manquants
    Bonjour,

    j'ai un formulaire de recherche multicritères.

    Lorsque j'effectue une recherche cela semble fonctionner correctement.

    En revanche à l'ouverture, et lorsque je RAZ les filtres,
    je n'ai pas l'intégralité de mes enregistrements.

    Les enregistrements dont le champs [ART_memo] est vide n'apparaissent pas.


    Ci-aprés la formule de la requête source :
    Citation Envoyé par formule
    Comme VraiFaux(EstNull([Formulaires]![F1_ART]![filtreMemo]);"*" & Null & "*";"*" & [Formulaires]![F1_ART]![filtreMemo] & "*")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T8_ART.ART_idART, T8_ART.ART_memo
    FROM T8_ART
    WHERE (((T8_ART.ART_memo) Like IIf(IsNull([Formulaires]![F1_ART]![filtreMemo]),"*" & Null & "*","*" & [Formulaires]![F1_ART]![filtreMemo] & "*")));
    Sa fait un moment, que j'essai de retourner la formule dans tous les sens, mais j'arrive pas à trouver ce qui pose problème

  2. #2
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 1 061
    Points
    1 061
    Par défaut
    Bonjour,
    Fais un Debug.Print pour vérifier la valeur retour de la fonction IIf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print IIf(IsNull([Formulaires]![F1_ART]![filtreMemo]),"*" & Null & "*","*" & [Formulaires]![F1_ART]![filtreMemo] & "*")
    Bon DEV
    .
    Diviser c'est régner : United we stand, Divided we fall
    .

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 769
    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 769
    Points : 14 810
    Points
    14 810
    Par défaut
    bonsoir,
    En revanche à l'ouverture, et lorsque je RAZ les filtres,
    je n'ai pas l'intégralité de mes enregistrements.
    ce que tu souhaites obtenir n'est pas clair: si tu veux afficher tous les enregistrements sans filtre, il faut mieux supprimer la clause WHERE.
    De plus, Null ne peut pas être une valeur de comparaison: [Monchamp] = Null ou [Monchamp] like Null ou [Monchamp] like "*Null*" ne te renverra jamais rien sauf si il y a vraiment écrit "Null" dans ton champ (et à condition d'utiliser la troisième syntaxe avec les guillemets)

    Pour tester si un champ contient la valeur nulle il faut toujours utiliser la fonction Isnull() qui renverra Vrai si le champ est nul (et non pas vide comme souvent écrit dans les posts) ou Faux si il ne l'est pas:
    syntaxes correctes: WHERE IsNull([Monchamp]) pour avoir les valeurs nulles
    ou WHERE Not IsNull([Monchamp]) pour avoir les non nulles

    Si tu veux afficher les enregistrements qui correspondent au critère du filtre et également les valeurs nulles, il faut 2 lignes de critères en utilisant OR:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T8_ART.ART_idART, T8_ART.ART_memo
    FROM T8_ART
    WHERE ((IsNull(T8_ART.ART_memo)) OR (T8_ART.ART_memo Like "*" & [Formulaires]![F1_ART]![filtreMemo] & "*"));
    ou si c'est ton filtre qui est vide et que tu veux afficher TOUS les enregistrements, il faut enlever & Null & "*" dans ton expression et supprimer les nuls de ton champ avec Nz():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T8_ART.ART_idART, T8_ART.ART_memo
    FROM T8_ART
    WHERE Nz(T8_ART.ART_memo) Like IIf(IsNull([Formulaires]![F1_ART]![filtreMemo]),"*","*" & [Formulaires]![F1_ART]![filtreMemo] & "*");
    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 ?

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par star Voir le message
    Bonjour,
    Fais un Debug.Print pour vérifier la valeur retour de la fonction IIf
    Debug.Print IIf(IsNull([Formulaires]![F1_ART]![filtreMemo]),"*" & Null & "*","*" & [Formulaires]![F1_ART]![filtreMemo] & "*")
    .
    Merci mais, il s'agit d'une requête manuelle et d'un formulaire... je ne sais pas comment utiliser debug de cette façon :/

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    [...] ou si c'est ton filtre qui est vide et que tu veux afficher TOUS les enregistrements, il faut enlever & Null & "*" dans ton expression et supprimer les nuls de ton champ avec Nz():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T8_ART.ART_idART, T8_ART.ART_memo
    FROM T8_ART
    WHERE Nz(T8_ART.ART_memo) Like IIf(IsNull([Formulaires]![F1_ART]![filtreMemo]),"*","*" & [Formulaires]![F1_ART]![filtreMemo] & "*");
    MERCI !
    Sa fonctionne parfaitement maintenant

    Je ne connaissais pas la fonction Nz()
    Merci encore...

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

Discussions similaires

  1. [AC-2007] Recherche Multicritères avec champs vide
    Par plop001 dans le forum Access
    Réponses: 1
    Dernier message: 15/01/2015, 17h35
  2. [AC-2000] Récupérer un enregistrement avec champ vide
    Par Remus91 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/07/2009, 15h20
  3. Affichage enregistrements avec champs vides
    Par Tybot dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/11/2008, 10h10
  4. [stringtokenizer] probleme avec champs vides
    Par gege2mars dans le forum Langage
    Réponses: 9
    Dernier message: 30/06/2004, 08h25
  5. Pb de tri avec champs vide
    Par nesbla dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2004, 17h42

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