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 :

Résultat d'une requête SQL dans une combo


Sujet :

WinDev

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut Résultat d'une requête SQL dans une combo
    Bonjour,

    En fait ma question regroupe 2 problèmes que je rencontre :

    1. Création d'une requête SQL trop complexe pour moi

    2. Afficher le résultat de la requête dans un champ combo.



    1. Création d'une requête SQL


    Dans notre établissement scolaire, nous avons plusieurs filières d'étude. Chaque filière peut-être subdivisée en 1 ou plusieurs 'divisions' ; par exemple, notre filière de commerce peut avoir une division monolingue ou bilingue.


    les infos sont stockées selon le schéma suivant (ici, la division est notée 'Type') :
    Nom : OptionsFilieres.png
Affichages : 357
Taille : 6,0 Ko

    Dans la gestion des mes filières, j'ai un champ combo pour ajouter une nouvelle division à la filière en cours mais j'aimerais que ce champ combo ne m'affiche que les divisions que je n'ai pas encore pour cette filière.
    J'aimerais donc réaliser une requête SQL qui possède en paramètre d'entrée l'ID de la filière avec laquelle je travaille et qui m'affiche toutes les divisions non encore utilisées.

    J'arrive faire cela en imbriquant deux requêtes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TypeFiliere.IDFiliere, TypeFiliere.IDType, Filieres.Abrege
    FROM Filieres INNER JOIN TypeFiliere ON Filieres.IDFiliere = TypeFiliere.IDFiliere
    WHERE (((TypeFiliere.IDFiliere)=<MonParamètreFilièreEnCours>));
    -> cette requête est sauvée sous le terme 'FiltreFiliere'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Types.Abrege, Types.Intitule, Types.IDType
    FROM Types LEFT JOIN FiltreFiliere ON Types.[IDType] = FiltreFiliere.[IDType]
    WHERE (((FiltreFiliere.IDType) Is Null));
    Finalement, le résultat de cette requête devrait être la source de mon champ combo mais je ne sais pas si cela est possible....

    Avez-vous une idée ?
    merci à tous

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 261
    Par défaut
    Pour la partie requete uniquement, tu as dans la syntaxe SQL des commandes comme IN, ou ici NOT IN

    A priori, sur ta demande, sans trop réfléchir, ça donnerait ça, en une seule requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Types.Abrege, Types.Intitule, Types.IDType
    FROM Types
    where Type.idfiliere not in 
       (
       SELECT TypeFiliere.IDFiliere 
       FROM Filieres INNER JOIN TypeFiliere ON Filieres.IDFiliere = TypeFiliere.IDFiliere
       WHERE (((TypeFiliere.IDFiliere)=<MonParamètreFilièreEnCours>))
       )

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Pour la partie requete uniquement, tu as dans la syntaxe SQL des commandes comme IN, ou ici NOT IN

    A priori, sur ta demande, sans trop réfléchir, ça donnerait ça, en une seule requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Types.Abrege, Types.Intitule, Types.IDType
    FROM Types
    where Type.idfiliere not in 
       (
       SELECT TypeFiliere.IDFiliere 
       FROM Filieres INNER JOIN TypeFiliere ON Filieres.IDFiliere = TypeFiliere.IDFiliere
       WHERE (((TypeFiliere.IDFiliere)=<MonParamètreFilièreEnCours>))
       )
    Super, merci je vais déjà insérer cela dans une variable et voir comment je peux faire...
    Merci encore pour ta précieuse aide

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2017
    Messages
    3 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2017
    Messages : 3 032
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Une fois la requête enregistrée dans le requêteur (e.g. REQ_Filière,) il suffit de créer un combo de type Fichier avec REQ_Filière comme source.
    Note
    En sélectionnant IDType comme valeur mémorisée, tu auras directement accès à la filière via la valeur de la combo.
    e.g.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HLitRecherchePremier(REQ_Filière,IDType,COMBO_Filière)
    TraceConstruit("Clair : %1, Code : %2", REQ_Filière.Intitulé, REQ_Filière.Abrégé)
    Remarque
    Dans la mesure où Intitulé et Abrégé sont des clés alternatives (i.e. elles auraient très bien pu être clés primaires,) tu peux très bien ne pas inclure IDType dans ta requête et choisir comme variable mémorisée l'une ou l'autre des colonnes.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Bonjour,
    Une fois la requête enregistrée dans le requêteur (e.g. REQ_Filière,) il suffit de créer un combo de type Fichier avec REQ_Filière comme source.
    Note
    En sélectionnant IDType comme valeur mémorisée, tu auras directement accès à la filière via la valeur de la combo.
    e.g.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HLitRecherchePremier(REQ_Filière,IDType,COMBO_Filière)
    TraceConstruit("Clair : %1, Code : %2", REQ_Filière.Intitulé, REQ_Filière.Abrégé)
    Remarque
    Dans la mesure où Intitulé et Abrégé sont des clés alternatives (i.e. elles auraient très bien pu être clés primaires,) tu peux très bien ne pas inclure IDType dans ta requête et choisir comme variable mémorisée l'une ou l'autre des colonnes.
    Merci beaucoup pour ton aide ... mais j'aurais effectivement dû préciser ma question car je ne souhaitais pas créer de requête mais tout faire par programmation :

    J'ai pris le code de tbc92 et l'ai mis sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CodeSQL est une chaîne
    SD est une Source de Données
     
    CodeSQL = [
    SELECT NomClient, Ville FROM CLIENTS
    WHERE Pays='%1'
    ]
     
    // Liste des clients de France
    CodeSQL = ChaîneConstruit(CodeSQL, IDType)
     
    SI HExécuteRequêteSQL(SD, cnxBase, hRequêteSansCorrection, CodeSQL ALORS
    ...


    j'aurais voulu pouvoir ensuite utiliser le résultat comme source de ma combo mais je ne pense pas que c'est possible.
    J'ai donc, à l'intérieur de mon test, fait un parcours de tous mes éléments et ja'i manuellement ajouter les lignes à ma combo


    Cela fonctionne bien...
    Merci à vous

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 261
    Par défaut
    Je n'aime pas trop les combos, donc j'utilise peu.
    Mais avec les fonctions ListeAjoute (ou TableAjoute si tu définis ta combo pour que la partie 'déroulée' soit une table), tu peux tout à fait alimenter ta combo par programmation.

    Le lien que j'ai mis propose un exemple où on ajoute une option a une combo.

  7. #7
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2017
    Messages
    3 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2017
    Messages : 3 032
    Billets dans le blog
    1
    Par défaut
    Regarde aussi du côté de gLien (attention à bien cocher la case qui va bien) pour permettre à la combo de retourner autre chose que le n° de ligne

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 183
    Par défaut
    Super, merci à vous deux !
    Tout marche bien !

    Excellente soirée à vous

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

Discussions similaires

  1. résultat de la requête SQL dans un Fichier XML
    Par hakimjava dans le forum NetBeans
    Réponses: 8
    Dernier message: 26/02/2016, 18h08
  2. [MySQL] résultat de la requête SQL dans un Fichier XML
    Par Invité dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 05/07/2013, 19h26
  3. Afficher le résultat de 2 requêtes SQL dans la même page aspx
    Par gringos3421 dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 17/03/2010, 14h08
  4. Réponses: 3
    Dernier message: 11/02/2008, 12h40
  5. Réponses: 3
    Dernier message: 11/02/2008, 12h40

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