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

WinDev Discussion :

Requête et Rubrique calculée [WD16]


Sujet :

WinDev

  1. #1
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut Requête et Rubrique calculée
    Bonjour,

    C'est tout simple à comprendre !
    Mais je pense qu'il est inévitable d'utiliser 2 requêtes compte tenu de la limitations des instructions SQL ou fonctions WLangage disponibles dans ces rubriques calculées. Ou alors j'ai pas bien vu !

    Voici le code SQL de ma requête qui permet d'affecter la valeur 1 à code couleur d'une localisation précise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT 
      OEUVRES.IDOEUVRE AS IDOEUVRE,  
      OEUVRES.IDBIBLIOTHEQUE AS IDBIBLIOTHEQUE,  
      OEUVRES.IDLOCALISATION AS IDLOCALISATION,  
      1 AS CodeCouleurOeuvre
    FROM 
      OEUVRES
    WHERE 
      OEUVRES.IDBIBLIOTHEQUE = ParamBibliothèqueEnCours
      AND  OEUVRES.IDLOCALISATION = ParamBibliothèqueEnCours
    Cependant je voudrais pouvoir affecter la valeur 2 pour les autres localisations... sans avoir à faire une autre requête.

    Du type, une simple condition intégrée dans cette rubrique calculée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Si Localisation = Troyes alors
       CodeCouleurOeuvre = 1
    Sinon
       CodeCouleurOeuvre = 2
    FIN
    Et là ... j'ai pas trouvé

    merci à vous
    La patience est d'or, l'aide est inestimable ...

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour

    Une suggestion :
    utiliser SI -Instruction conditionnelle monoligne, voir les notes :
    <Résultat> = <Condition> ? <Expression 1> SINON <Expression 2>

    soit

    localisation = 'Troyes' ? 1 SINON 2
    Mais je ne suis pas certain que cela passera.
    Je n'ai jamais essayé dans votre cas de figure.


    Attention aussi à la notation de la fonction WLangage qui doit être préfixée "WL."


    Hemgé

  3. #3
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT 
      OEUVRES.IDOEUVRE AS IDOEUVRE,  
      OEUVRES.IDBIBLIOTHEQUE AS IDBIBLIOTHEQUE,  
      OEUVRES.IDLOCALISATION AS IDLOCALISATION,  
      (CASE Localisation WHEN 'Troyes' THEN 1 ELSE 2 END) AS CodeCouleurOeuvre 
    ...
    Si si, ça marche même en Hyperfile

  4. #4
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Merci Hemgé, mais dans le rubrique calculée d'une requête,

    SI -Instruction conditionnelle monoligne n'est pas accepté...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IDLOCALISATION = IDBLIBLIOTHEQUE ? 1 Sinon 2
    Je vais voir la solution de hpascal

    A+
    La patience est d'or, l'aide est inestimable ...

  5. #5
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Merci hPascal,

    çà fonctionne ... dans la rubrique calculée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (CASE when OEUVRES.IDLOCALISATION=OEUVRES.IDBLIBLIOTHEQUE THEN 1 ELSE 2 END)
    J'avais 6 requêtes consécutives, 3 extractions + 2 unions + 1 ajout d'info et je vais par l'imbrication de cette fonction CASE, pourvoir réduire considérablement le temps de traitement

    A+
    La patience est d'or, l'aide est inestimable ...

  6. #6
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Oups !

    Petit complément ...

    Je voudrais pouvoir récupérer la valeur passée dans ma requête, par programmation, avec comme paramètre "ParamBlibliothèqueEnCours" et ainsi la lire et l'utiliser dans ma rubrique calculée et là ?

    Ce n'est peut être pas possible !
    La patience est d'or, l'aide est inestimable ...

  7. #7
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Si ça doit être possible, il suffit d'utiliser {ParamBlibliothèqueEnCours} dans ta rubrique calculée
    Par exemple dans cette requête je ne fais pas de calcul mais le principe est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
    	Modreg.Code_Mdr AS Code_Mdr,	
    	Modreg.Lib_Mdr AS Lib_Mdr,	
    	Modreg.Type_Remise AS Type_Remise,	
    	Modreg.Code_Compta AS Code_Compta,
    	{Param1} AS MonParam
    FROM 
    	Modreg
    WHERE 
    	Modreg.Type_Remise = {Param1}
    {Param1} est utilisé pour filtrer mais aussi dans les colonnes affichées

    Mais je n'ai peut être pas compris ta demande

  8. #8
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Je voudrais pouvoir récupérer la valeur passée dans ma requête, par programmation, avec comme paramètre "ParamBlibliothèqueEnCours" et ainsi la lire et l'utiliser dans ma rubrique calculée et là ?
    Je ne suis pas sur de comprendre ta demande...
    Après chaque exécution d'une requête ces paramètres sont vidés par conséquent on ne peut pas utiliser un paramètre en espérant récupérer la valeur.

    Par contre la valeur que tu passe à ton paramètre n'est pas dans un champ ou une variable ? et donc utilisable après l'exécution de la requête...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  9. #9
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    En lisant le message de @hpascal je comprends mieux ta demande

    N'ayant jamais pratiqué la proposition de @hpascal j'ai voulu tester
    et elle fonctionne...
    Mais pour pouvoir faire des calculs il faut caster ton paramètre.

    Ce qui donne en reprenant la requête de @hpascal et en supposant que ton paramètre est un entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT 
    	Modreg.Code_Mdr AS Code_Mdr,	
    	Modreg.Lib_Mdr AS Lib_Mdr,	
    	Modreg.Type_Remise AS Type_Remise,	
    	Modreg.Code_Compta AS Code_Compta,
    	CAST({Param1} AS INTEGER)*10 AS MonParam
    FROM 
    	Modreg
    WHERE 
    	Modreg.Type_Remise = {Param1}
    je plusois @hpascal pour son idée
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  10. #10
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    Effectivement, il est possible de récupérer le paramètre passé par programmation dans la rubrique calculée.

    Le code de la rubrique est simple et fonctionnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (CASE when {ParamBlibliothèqueEnCours}=OEUVRES.IDBlibliothèque and {ParamBlibliothèqueEnCours}=OEUVRES.IDLOCALISATION THEN 1 ELSE 3 END)
    par contre, dès que je complexifie la ligne de commande, il y a une erreur de syntaxe !!!

    Critères d'affectation du code couleur
    - {ParamBlibliothèqueEnCours} = IDBlibliothèque et {ParamBlibliothèqueEnCours} = IDLOCATION Alors CodeCouleur = 1
    - {ParamBlibliothèqueEnCours} = IDBlibliothèque et {ParamBlibliothèqueEnCours} <> IDLOCATION Alors CodeCouleur = 3
    - {ParamBlibliothèqueEnCours} <> IDBlibliothèque et {ParamBlibliothèqueEnCours} = IDLOCATION Alors CodeCouleur = 2
    - {ParamBlibliothèqueEnCours} <> IDBlibliothèque et {ParamBlibliothèqueEnCours} <> IDLOCATION Alors CodeCouleur = 4

    Régle syntaxique
    CASE WHEN Condition 1 THEN Valeur retournée 1 [WHEN Condition 2 THEN Valeur retournée 2][ELSE Valeur retournée par défaut] END

    Par contre le code de la rubrique calculé là, est non fonctionnelle ( je test déjà les 2 premiers critères d'affectation du code couleur... les autres sont à venir !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (CASE when {ParamBlibliothèqueEnCours}=OEUVRES.Blibliothèque and {ParamBlibliothèqueEnCours}=OEUVRES.IDLOCALISATION THEN 1 [when {ParamBlibliothèqueEnCours}=OEUVRES.IDBlibliothèque and {ParamBlibliothèqueEnCours}<>OEUVRES.IDLOCALISATION THEN 3][ELSE 2] END)
    La patience est d'or, l'aide est inestimable ...

  11. #11
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (CASE when {ParamBlibliothèqueEnCours}=OEUVRES.Blibliothèque and {ParamBlibliothèqueEnCours}=OEUVRES.IDLOCALISATION THEN 1 when {ParamBlibliothèqueEnCours}=OEUVRES.IDBlibliothèque and {ParamBlibliothèqueEnCours}<>OEUVRES.IDLOCALISATION THEN 3 ELSE 2 END)
    Essai en enlevant les [] dans l'aide ils servent indiquer ce qui est optionnel...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  12. #12
    Membre habitué Avatar de GCASPIC10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 247
    Points : 144
    Points
    144
    Par défaut
    laurent30s et hpascal,
    Là çà fonctionne ...

    Essai en enlevant les [] dans l'aide ils servent indiquer ce qui est optionnel...
    Effectivement, j'ai querlques soucis de compréhension sur les exemples donnés, particulièrement au niveau syntaxique. A force de les triturer dans tous les sens, je n'y voit plus rien ! c'est l'âge

    Encore merci
    La patience est d'or, l'aide est inestimable ...

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

Discussions similaires

  1. [Requête ou VBA] Calcul et Attribution de date
    Par ancel17 dans le forum Access
    Réponses: 2
    Dernier message: 11/12/2013, 11h30
  2. [WD15] Requêtes : rubrique calculée
    Par wd_newbie dans le forum WinDev
    Réponses: 9
    Dernier message: 24/08/2012, 10h01
  3. [WD16] Requête : Utilisation d'une rubrique calculée
    Par lucienkany dans le forum WinDev
    Réponses: 1
    Dernier message: 16/01/2012, 08h18
  4. [Requête]exécuter un calcul en fonction d'une quotité
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/04/2007, 23h08
  5. Requêtes Oracle et calcul de date
    Par bobic dans le forum Oracle
    Réponses: 7
    Dernier message: 20/04/2006, 13h58

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