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 :

[Requete] Comment donner une valeur par défaut à un paramètre


Sujet :

Requêtes et SQL.

  1. #1
    Membre averti Avatar de soforever
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 276
    Points : 306
    Points
    306
    Par défaut [Requete] Comment donner une valeur par défaut à un paramètre
    Bonjour,

    J'ai la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT PropoInspecteur.DateDevis, Month([DateDevis]) AS Mois, Year([DateDevis]) AS Annee, PropoInspecteur.CoutPropose
    FROM PropoInspecteur
    WHERE (((Year([DateDevis]))=[Forms]![F_Indicateur]![Choix_Annee_Propo]) AND ((PropoInspecteur.NomEmetteur)=[ModNomPropo]))
    ORDER BY Month([DateDevis]);
    Je voudrais que, lorsque le paramètre "[ModNomPropo]" est non renseigné, celui-ci ne rentre pas en compte dans la requête. Cela est il possible ?

    J'aurais alors la même requete sans tenir compte de cette clause where...

    Merci d'avance

  2. #2
    Membre averti Avatar de soforever
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 276
    Points : 306
    Points
    306
    Par défaut
    Je viens de rajouter Not Null et ça répond à ma première interrogation MAIS en rajoutant cette condition, il ne me prend plus en compte l'autre condition, à savoir celle sur l'année !

    Voilà la requête maintenant :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT PropoInspecteur.DateDevis, Month([DateDevis]) AS Mois, Year([DateDevis]) AS Annee, PropoInspecteur.CoutPropose
    FROM PropoInspecteur
    WHERE (((Year([DateDevis]))=[Forms]![F_Indicateur]![Choix_Annee_Propo])
    AND ((PropoInspecteur.NomEmetteur)=[ModNomPropo])) OR (((PropoInspecteur.NomEmetteur) Is Not Null))
    ORDER BY Month([DateDevis]);

    Comment je peux faire pour obtenir le même résultat mais en tenant toujours compte de la condition
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((Year([DateDevis]))=[Forms]![F_Indicateur]![Choix_Annee_Propo])
    qu'il ignore maintenant

    Merci

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Bonjour,
    tu peux passer par un booléen
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND ((PropoInspecteur.NomEmetteur)=[ModNomPropo])) OR (PropoInspecteur.NomEmetteur) IS NULL) = true;
    L'autre solution serait de passer par un iif, mais c'est encore moins propre.

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

    Pourquoi ne fais tu pas une condition ?

    Si j'ai cela je lance la requête avec le Where, sinon je lance la requête sans le Where.

    Starec

  5. #5
    Membre averti Avatar de soforever
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 276
    Points : 306
    Points
    306
    Par défaut
    Merci mais ca ne marche pas...

    En ajoutant le booléen il effectue une condition de plus mais toujours sur toutes les années et tout le temps... Je ne suis aps sur qu'il gère le booléen comme je pensais l'avoir compris ici...

  6. #6
    Membre averti Avatar de soforever
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 276
    Points : 306
    Points
    306
    Par défaut
    @ Starec

    J'avais d'abord pensé, en effet, faire tout ça en VB et ne faire que de l'appel de requête MAIS (décidemment ca me gache la vie ce mot...) je ne fais que reprendre une application existante.
    Je ne saurais donc pas ou placer ce code car d'après ce que j'ai vu sur l'architecture de l'appli, mon prédesseceur à codé ça à l'arrache "pourQueCaMarche" mais n'avait pas pensé à une future évolution...

    Donc je reste sur ma première solution qui est en fait effectivement d'effectuer un "SI" dans une requête SQL mais la je bute et je n'ai trouvé de pistes nul part pour faire ce genre de manip'.

    Mais si on me confirme que l'on ne peut pas j'en resterai la car la solution que j'ai actuellement convient, je voulais juste "peaufiner".

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Tu as mal "parenthésé" ta clause WHERE.

    Avec ton code mal parenthésé tu dis:
    SI conditionA ET conditionB OU conditionC

    ce qui est sûrement interprété comme ceci (regarde les parenthèses):
    SI (conditionA ET conditionB) OU conditionC
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE (((Year([DateDevis]))=[Forms]![F_Indicateur]![Choix_Annee_Propo])
    AND ((PropoInspecteur.NomEmetteur)=[ModNomPropo])) OR (((PropoInspecteur.NomEmetteur) Is Not Null))

    Alors que tu voudrais dire:
    SI conditionA ET (conditionB OU conditionC)

    Je te donne la clause WHERE correspondante, avec le minimum de parenthèses:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE Year([DateDevis])=[Forms]![F_Indicateur]![Choix_Annee_Propo] 
    AND (PropoInspecteur.NomEmetteur=[ModNomPropo] OR PropoInspecteur.NomEmetteur Is Not Null)

  8. #8
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    Citation Envoyé par soforever
    Bonjour,

    J'ai la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT PropoInspecteur.DateDevis, Month([DateDevis]) AS Mois, Year([DateDevis]) AS Annee, PropoInspecteur.CoutPropose
    FROM PropoInspecteur
    WHERE (((Year([DateDevis]))=[Forms]![F_Indicateur]![Choix_Annee_Propo]) AND ((PropoInspecteur.NomEmetteur)=[ModNomPropo]))
    ORDER BY Month([DateDevis]);
    Je voudrais que, lorsque le paramètre "[ModNomPropo]" est non renseigné, celui-ci ne rentre pas en compte dans la requête. Cela est il possible ?
    Voilà ce que je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT   PropoInspecteur.DateDevis,
             Month([DateDevis]) AS Mois,
             Year([DateDevis]) AS Annee,
             PropoInspecteur.CoutPropose
    FROM     PropoInspecteur
    WHERE    Year([DateDevis]) = [Forms]![F_Indicateur]![Choix_Annee_Propo]
             AND (PropoInspecteur.NomEmetteur = [ModNomPropo]
                   OR [ModNomPropo] IS NULL)
    ORDER BY Month([DateDevis]);

  9. #9
    Membre averti Avatar de soforever
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 276
    Points : 306
    Points
    306
    Par défaut
    Merci beaucoup à vous !

    Je ne peux pas tester pour l'instant... week end...

    Mais dès lundi je vous tiens au courant !

    Encore merci à vous !

  10. #10
    Membre averti Avatar de soforever
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 276
    Points : 306
    Points
    306
    Par défaut Let's rock !
    Et me revoilà de retour de week end... et ça marche !

    Alors je tiens à tous vous remercier :
    =JBO= -> il y avait un petit soucis dasn ta clause proposée, il permettait l'affichage de la globalité mais ne prenait plus en compte chaque élément de la liste. Par contre merci pour ton petit rappel sur les ()...

    J1 -> c'est ta solution qui fonctionne parfaitement ! que dire de plus que Merci !

    Bonne continuation

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/08/2013, 08h57
  2. Réponses: 2
    Dernier message: 02/09/2011, 10h29
  3. Réponses: 3
    Dernier message: 13/07/2011, 15h58
  4. Réponses: 1
    Dernier message: 20/05/2011, 11h35
  5. [1.x] Donner une valeur par défaut à dans une liste
    Par sebastien.bd dans le forum Symfony
    Réponses: 9
    Dernier message: 26/04/2011, 10h39

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