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 :

Remplir des Combo depuis l'initialisation du projet


Sujet :

WinDev

  1. #1
    Membre habitué
    Homme Profil pro
    Informaticien en retraite ...
    Inscrit en
    Janvier 2008
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Informaticien en retraite ...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 418
    Points : 179
    Points
    179
    Par défaut Remplir des Combo depuis l'initialisation du projet
    Bonjour,
    J'ai des combo que je remplit à partir de fichiers
    (J'ai des écrans de saisie pour ces fichiers)
    Ces combo sont utilisé dans plusieurs écrans
    Aussi j'ai fait une procédure unique pour ce remplissage, qui attend les paramètres : Nom de la fenêtre, nom de la combo, identifiant de l'enregistrement à utiliser)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    PROCÉDURE Remplir_Combo(sFenetre, sCombo, sIdentifiantCombo )
    gbOK= HExécuteRequête(REQ_LibelléCombo,hRequêteDéfaut, sIdentifiantCombo)
    SI gbOK = Vrai ALORS
    	POUR TOUT REQ_LibelléCombo
    ////////		info(REQ_LibelléCombo.CB_Libellé)
    		SI REQ_LibelléCombo.CB_Identifiant=sIdentifiantCombo ALORS
    			ListeAjoute(sFenetre+"."+sCombo,REQ_LibelléCombo.CB_Libellé)
    		FIN
     	FIN
    SINON
    	Beep()
    	Erreur("La requête n'a pas été exécutée.")
    	RETOUR
    FIN
    L'appel se fait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Remplir_Combo("FEN_ElèveFiche","COMBO_LangueMaternelle",gsComboLangue)
    Je met cet appel dans la fin d'initialisation de chaque fenêtre qui utilise cette combo, en donnant bien sure à chaque fois
    Le problème, c'est que du coup cette procédure et sa requête est exécutée plusieurs fois, alors que les informations n'ont pas forcément changées
    J'ai alors voulu mettre le lancement de ces procédures, du remplissage des Combo dans le code d'initialisation du projet
    Là, j'ai une erreur, la fenêtre n'est pas connue !
    J'ai voulu mettre alors ces appels dans la fin d'initialisation de la première fenêtre ouverte du projet Idem !!!

    Comment faire ? Comment utiliser l'indexation indirecte ?

    j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Remplir_Combo({"FEN_ElèveFiche",indFenêtre},{"COMBO_LangueMaternelle",indChamp},gsComboLangue)
    Même erreur, fenêtre inconnue

    Cordialement
    SC

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonsoir
    Exécutez la requête seulement. Puis remplissez la combo à l'ouverture de la fenêtre.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    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 057
    Points : 9 397
    Points
    9 397
    Par défaut
    J'ai peur que l'indication de Yusep ne soit pas assez détaillée pour un débutant.

    Dans le code d'initialisation du projet (tout premier pavé), tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TB_combo est un tableau de 0 chaine
    Puis tu exécute ta procédure. Mais sauf qu'au lieu d'alimenter une combo, tu alimentes ce tableau TB_COMBO

    Ensuite, à chaque fois que tu ouvres une fenêtre, tu déverses ce tableau TB_COMBO dans ta combo. (= tu copies ...)
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre habitué
    Homme Profil pro
    Informaticien en retraite ...
    Inscrit en
    Janvier 2008
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Informaticien en retraite ...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 418
    Points : 179
    Points
    179
    Par défaut
    Bonjour,
    Merci à tous
    J’espère avoir bien compris
    Remplir un tableau avec le fichier adéquat puis utiliser ce tableau pour remplir la Combo est une bonne idée, elle permet de n'exécuter la requête qu'une fois, au lancement
    Mais ensuite il me faudra à chaque fois remplir la Combo ...
    Et il va falloir autant de tableau que de Combo
    Je ne suis pas sure d'être gagnant ...

    N'y a t il pas moyen de mettre le nom d'une fenêtre, d'un champ, dans une variable, puis d'utiliser cette variable ?

    Cordialement
    SC

  5. #5
    Membre habitué
    Homme Profil pro
    Informaticien en retraite ...
    Inscrit en
    Janvier 2008
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Informaticien en retraite ...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 418
    Points : 179
    Points
    179
    Par défaut
    Re-bonjour,
    la remarque de Yusep m'a donné une idée
    J'ai changé la description de mes Combo Au lieu de les remplir par programmation, je les rattaches à une requête (Sur le fichier des libellés pour cette requête)
    Cette requête, je l’exécute une fois dans le code du projet, et après le lancement de la mise à jour du fichier des libellés

    Par contre, j'ai été obligé de faire autant de requête que de type de Combo, car je crois qu'il y a un buffer unique par requête
    Je m'explique, dans le fichier des libellés, j'ai un enregistrement qui stocke le type de libellé
    J'ai par exemple "Nationalité,Française", "Nationalité,Sénégalaise" "Langue,Français", "Langue,Sénégalais"
    Je n'avais qu'une requête, avec un paramètre avec égalité sur le type d'enregistrement

    Je crains que si je lance la requête avec égalité sur "Nationalité", puis la requête avec égalité sur "Langue", les Combo nationalité vont afficher les langues ...
    Je n'ai pas fait de test car cela me parait évident

    Mais j'aimerai quand même trouver le moyen de mettre des nom de fenêtre, de champ, dans une variable, et utiliser ces variable ...
    Cordialement
    SC

  6. #6
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 999
    Points : 2 526
    Points
    2 526
    Par défaut
    Si c'est si pénalisant en temps (pas sûr) la solution de tbc92 me semble la meilleure façon d'optimiser (un peu).
    Mais j'ai l'impression que tu cherches la petite bête.

    Par contre si le contenu des combos change (ajout d'un pays, d'une langue, etc..) en cours de travail des utilisateurs
    ça va leur faire bizarre de ne pas retrouver leurs ajouts/modifs dans les combos.

    Perso, je préfère actualiser à chaque fenêtre.

  7. #7
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 811
    Points : 5 270
    Points
    5 270
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par scn68100 Voir le message
    J'ai par exemple "Nationalité,Française", "Nationalité,Sénégalaise" "Langue,Français", "Langue,Sénégalais"
    Je n'avais qu'une requête, avec un paramètre avec égalité sur le type d'enregistrement

    Je crains que si je lance la requête avec égalité sur "Nationalité", puis la requête avec égalité sur "Langue", les Combo nationalité vont afficher les langues ...
    Je n'ai pas fait de test car cela me parait évident
    Sans ta requête on ne peut pas être précis, mais, dans la fin d'initialisation de ta fenêtre ton code est de la forme (e.g. pour la nationalité)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    REQ_LibelléCombo.pNationalité=MonParamNationalité
    REQ_LibelléCombo.pLangue=Null
    ListeAffiche(Combo_Nationalité,taRéExécuteRequête)
    Le liste affiche prend en compte le résultat de la requête qui vient d'être exécutée (i.e. dans ce cas avec la prise en compte de la nationalité, quelle que soit la langue)
    Si la requête est réinterrogée ultérieurement avec d'autres paramètre, le contenu de ta combo ne changera pas sauf si tu fais un nouveau ListeAffiche.
    Donc à priori, une seule requête peut suffire.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  8. #8
    Membre habitué
    Homme Profil pro
    Informaticien en retraite ...
    Inscrit en
    Janvier 2008
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Informaticien en retraite ...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 418
    Points : 179
    Points
    179
    Par défaut
    Citation Envoyé par serendib Voir le message
    Si c'est si pénalisant en temps (pas sûr) la solution de tbc92 me semble la meilleure façon d'optimiser (un peu).
    Mais j'ai l'impression que tu cherches la petite bête.

    Par contre si le contenu des combos change (ajout d'un pays, d'une langue, etc..) en cours de travail des utilisateurs
    ça va leur faire bizarre de ne pas retrouver leurs ajouts/modifs dans les combos.

    Perso, je préfère actualiser à chaque fenêtre.
    Bonjour,
    Merci de soulever ce problème, mais c'est résolu dans mon cas car la mise à jour d'une langue ou d'une nationalité se fait par l'utilisateur
    Cordialement
    SC

  9. #9
    Membre habitué
    Homme Profil pro
    Informaticien en retraite ...
    Inscrit en
    Janvier 2008
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Informaticien en retraite ...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 418
    Points : 179
    Points
    179
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Bonjour,

    Sans ta requête on ne peut pas être précis, mais, dans la fin d'initialisation de ta fenêtre ton code est de la forme (e.g. pour la nationalité)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    REQ_LibelléCombo.pNationalité=MonParamNationalité
    REQ_LibelléCombo.pLangue=Null
    ListeAffiche(Combo_Nationalité,taRéExécuteRequête)
    Le liste affiche prend en compte le résultat de la requête qui vient d'être exécutée (i.e. dans ce cas avec la prise en compte de la nationalité, quelle que soit la langue)
    Si la requête est réinterrogée ultérieurement avec d'autres paramètre, le contenu de ta combo ne changera pas sauf si tu fais un nouveau ListeAffiche.
    Donc à priori, une seule requête peut suffire.
    Bonjour,
    Merci de ces conseils
    Mais comme l'utilisateur peut lancer la mise à jour des langues ou des nationalités, je suis obligé d'avoir 2 requêtes différents
    Cordialement
    SC

  10. #10
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 811
    Points : 5 270
    Points
    5 270
    Billets dans le blog
    1
    Par défaut
    Pas en passant Null au paramètre non concerné
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  11. #11
    Membre habitué
    Homme Profil pro
    Informaticien en retraite ...
    Inscrit en
    Janvier 2008
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Informaticien en retraite ...
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 418
    Points : 179
    Points
    179
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Pas en passant Null au paramètre non concerné
    Bonsoir,
    C'est vrai, désolé ....

Discussions similaires

  1. remplir des combo box par une fonction ?
    Par angelevil dans le forum VB.NET
    Réponses: 5
    Dernier message: 06/10/2010, 23h12
  2. [XL-2003] Remplir des Combo selon choix de ligne
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 30/07/2009, 16h34
  3. Remplir un combo depuis Araylist()
    Par Le gris dans le forum Windows Forms
    Réponses: 4
    Dernier message: 20/07/2009, 19h55
  4. recuperer des informations depuis des textboxs pour remplir dans ma bd
    Par bruce207 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/12/2007, 11h18
  5. Réponses: 6
    Dernier message: 14/03/2007, 22h04

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