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 :

Affichage d'une requête dans le cas d'un paramètre vide


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 18
    Points
    18
    Par défaut Affichage d'une requête dans le cas d'un paramètre vide
    Bonjour à tous,

    J'ai un petit soucis (mais qui a tendance à me donner mal au crâne...) dans la création d'une base de données de métrologie. Je vous serai extrêmement reconnaissant si vous pouviez m'aider.
    J'ai créé une requête de selection à partir d'une table nommée Instruments". Cette table comprend beaucoup de champ dont "date_mis_serev_instr" (pour date de mise en service de l'instrument ).
    J'aimerai que l'utilisateur rentre un paramètre de sélection et que la requête ne renvoi que les enregistrements concernés.
    Normalement j'aurais inscrit sur la ligne "Critères" ceci : [Date de mise en service] (pour le champ cité plus haut).

    La est le problème :

    2 facteurs entre en compte : c'est une selection multi-critère et ce champ n'est pas obligatoirement rempli (impossible de le remplir pour certains instruments)

    J'avais donc essayer la formule suivante dans critère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nz([Date de mise en service de l'instrument];[instrument].[date_mis_serv_instr])
    La formule ne fait rien quand le paramètre est spécifié mais si le champ est vide alors il le remplace par la valeur du champ correspondant (je sais pas si je suis clair).
    Seulement ça ne resoud pas mon problème dans le cas où le champ est vide

    Donc si vous pouviez m'aider ce sera trop bien

    Voila en espérant que je suis clair

    P.S ci joint le code SQL de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Instrument.code_instr, Instrument.num_serie_instr, Instrument.desi_instr, Instrument.resol_instr, Instrument.echelle_inf_instr, Instrument.echelle_sup_instr, Instrument.period_instr, Instrument.date_achat_instr, Instrument.date_rebut_instr, Instrument.date_mis_serv_instr, Instrument.statut_instr
    FROM Instrument
    WHERE (((Instrument.code_instr) Like "*" & [Matricule de l'instrument] & "*") AND ((Instrument.num_serie_instr) Like "*" & [N° série de l'instrument] & "*") AND ((Instrument.desi_instr) Like "*" & [Désignation de l'instrument] & "*") AND ((Instrument.resol_instr)=nz([Résolution recherchée],[Instrument].[resol_instr])) AND ((Instrument.echelle_inf_instr)=nz([borne inf échelle],[Instrument].[echelle_inf_instr])) AND ((Instrument.echelle_sup_instr)=nz([borne sup échelle],[instrument].[echelle_sup_instr])) AND ((Instrument.period_instr)=nz([Période d'étalonnage],[instrument].[period_instr])) AND ((Instrument.date_achat_instr)=nz([Date d'achat de l'instrument],[Instrument].[date_achat_instr])) AND ((Instrument.date_rebut_instr)=nz([Date de rebut de l'instrument],[instrument].[date_rebut_instr])) AND ((Instrument.date_mis_serv_instr)=nz([Date de mise en service de l'instrument],[instrument].[date_mis_serv_instr])) AND ((Instrument.statut_instr)=nz([Statut de l'instrument],[Instrument].[statut_instr])));

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Essaie en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND ((Instrument.date_rebut_instr)=nz([Date de rebut de l'instrument],[instrument].[date_rebut_instr]))
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND ((Instrument.date_rebut_instr)=[Date de rebut de l'instrument] OR IsNull([Date de rebut de l'instrument])=True)
    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Ouahh c'est super merci beaucoup je savais bien que Led Zep c'était un des meilleurs groupe au monde !!

    Merci beaucoup

    ARGGGGGGGGG NON en fait ça ne fonctionne pas -_-
    Voila ce qu'il se passe avec ta formule :
    dans le cas où je laisse le paramètre vide, il m'affiche toutes les lignes où le champ en question est vide. Mais les champs remplis ne sont pas affichés.

    Or moi j'aimerais que lorsque je ne remplis pas le paramètre, access n'en tienne pas compte (il doit m'afficher la liste comme si je ne lui avais pas demandé de paramètre pour ce champ en fait)

    Voila merci encore

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    C'est peut-être que je me suis trompé de nom de champ, car j'avais bien compris le sens de ta question.

    Ça doit être plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND ((Instrument.date_mis_serv_instr)=nz([Date de mise en service de l'instrument],[instrument].[date_mis_serv_instr]))
    qu'il faut remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND ((Instrument.date_mis_serv_instr)=[Date de mise en service de l'instrument] OR IsNull([Date de mise en service de l'instrument])=True)
    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Ok ça fonctionne
    Le seul soucis c'est que j'emplois 4 fois cette formule (pour 4 paramètres différents) et j'obtiens des critères décalés sur 2puissance4 lignes soit 16 lignes.

    Est-ce important ? En fait c'est juste que le traitement me paraît lourd... mais peut-être que j'hallucine

    Voila merci bien pour ton aide

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    J'ai mis du temps mais je crois que j'ai compris.
    Tu veux dire que dans la requête affichée en mode création (par opposition au mode SQL), il y a 16 lignes de critères ?

    Je ne sais pas comment y remédier.
    Pour une fois le code SQL est plus clair que sa représenation en tableau

    Sinon il faut revenir à ton idée initiale mais avec plus de Nz et en donnant explicitement un type au paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (Nz([Instrument].[date_mis_serv_instr])=Nz([Date de mise en service de l'instrument], Nz([Instrument].[date_mis_serv_instr])))
    Il faut déclarer le paramètre Date de mise en service de l'instrument comme étant de type Date/Time
    Lorsque la requête est affichée en mode création, Menu principal->Requête->Paramètres
    Autrement le paramètre n'est pas interprété comme une date à cause de Nz qui convertit les données en texte dans une requête.
    Par exemple 4/1/2008 ne serait par convertit en "04/01/2008", et le test ("04/01/2008" = "4/1/2008") renverrait Faux.

    A+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Je te remercie beaucoup beaucoup LedZeppII

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

Discussions similaires

  1. Souci d'affichage d'une requête dans une table
    Par natalie75 dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/04/2015, 17h26
  2. [MySQL] affichage d'une requéte dans un formulaire
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/01/2013, 17h38
  3. [WD14] affichage d'une requête dans une table
    Par labib23dz dans le forum WinDev
    Réponses: 13
    Dernier message: 10/06/2011, 13h17
  4. Affichage d'une requête dans un tableau HTML
    Par jplec dans le forum Langage
    Réponses: 6
    Dernier message: 25/03/2011, 12h58
  5. Affichage d'une requête dans un textblock
    Par believe77 dans le forum Linq
    Réponses: 1
    Dernier message: 27/05/2010, 00h09

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