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

Lazarus Pascal Discussion :

Peuplement d'une DBLookupComboBox [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Peuplement d'une DBLookupComboBox
    Bonjour à toutes et à tous.
    Dans une fiche j'ai besoin à partir d'un DBLookupComboBox de sélectionner une valeur (act_valeur) et de récupérer son identifiant (act_id) dans la table t_e_action_act dans le schéma s_ent d'une base de données Postgresql. Le composant DBLookupComboBox est-il le mieux adapté sachant qu'il n'y aura pas de modification dans la base de données?
    Nom : Ajouter Coupons.jpg
Affichages : 361
Taille : 137,6 Ko
    Le peuplement de DBLookupComboBox (Label : Valeur) ne se fait pas. J'ai déposé une DBGrid sur la même fiche qui elle se peuple correctement. Voici le bout de code inclus dans le .create de la fiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      RequeteCoupon.Close;
      RequeteCoupon.SQL.Text := 'SELECT a.act_id, act_valeur FROM s_ent.t_e_action_act a ';
      RequeteCoupon.SQL.Add('JOIN s_ent.t_j_compte_action_cma c ON a.act_id = c.act_id ');
      RequeteCoupon.SQL.Add('WHERE cpt_id = :NUMCOMPTE ');
      RequeteCoupon.SQL.Add('ORDER BY act_valeur ASC;');
      RequeteCoupon.Params.ParamByName('NUMCOMPTE').AsInteger := Fiche_Accueil.Compte;
      RequeteCoupon.Open;
      DBLCBValeur.KeyField := RequeteCoupon.Fields[0].AsString;
      DBLCBValeur.ListField := RequeteCoupon.Fields[1].AsString;
    Voici les paramètres du DBLookupComboBox que j'ai modifiés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    KeyField : act-id
    ListField : act_valeur
    ReadOnly : true
    ScrollListDataset : true
    Style : csDropDownList
    Dans RequeteCoupon j'ai une requete passe partout pour vérifier les connexions des composants entre eux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT act_id, act_valeur FROM s_ent.t_e_action_act;
    Que me manque-t-il pour que cela fonctionne?
    Merci d'avance pour l'aide que vous ne manquerez pas de m'apporter.
    Michel.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 416
    Points : 5 814
    Points
    5 814
    Par défaut
    Salut

    Pour un DBLookupComboBox les champs à remplir sont :
    ListSource = Datasource de la liste déroulante
    DataSource = Datasource du dataset à renseigner
    DataField = Champs à renseigner
    ListField = Champs vus dans la liste déroulante
    KeyField = Champs de la liste à inserer dans le dataset
    Exemple : imagine Que tu as une table PAYS (P_ID,P_CODPAYS,P_NOMPAYS), une Table CLIENT(C_ID,C_NOM,...,C_CODPAYS,..), dans la requête de ta liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      stPays := 'Select P_CODPAYS,P_NOMPAYS '
      +' From Pays  '
      +' Where ...  ';
       CloseDataset(QrPays)
       QrPays.sql.clear;
       QrPays.sql.Add(stPays)
       OpenDataset(QrPays)
    On fait la même chose avec notre client en édition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    stClient := 'Select C_CODPAYS,... '
      +' From CLIENT '
      +' Where ...  ';
       CloseDataset(QrClient)
       QrClient.sql.clear;
       QrClient.sql.Add(stClient)
       OpenDataset(QrClient)
       QrClient.edit := true;
    En regardant le dfm d'un dblookup ... on peut voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    object DBLookupComboBox1: TDBLookupComboBox
     DataField = 'C_CodPays'
     DataSource = DSClients
     KeyField = 'P_CodPays'
     ListField = 'P_NomPays'
     ListSource = DSPAYS
     DropDownWidth = 300
    end
    Il reste donc à le transcrire dynamiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DBL.ListSource := DSPays;
    DBL.DataSource := DSClient;
    DBL.KeyField = 'P_CodPays';
    DBL.ListField = 'O_NomPays';
    DBL.DataField = 'C_CodPays';
    Normalement tout devrait fonctionner.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Merci anapurna pour ta réponse. Je venais juste de débusquer mon erreur quand je suis allé voir si j'avais une réponse à ma question d'hier. Je joins pour la postérité les images des paramètres à remplir pour une utilisation correcte d'un DBLookupComboBox pour une utilisation "Unbound" (cf. https://wiki.freepascal.org/TDBLookupComboBox).
    Nom : DBLCBValeur1.jpg
Affichages : 321
Taille : 115,0 KoNom : DBLCBValeur2.jpg
Affichages : 317
Taille : 107,0 KoNom : DBLCBValeur3.jpg
Affichages : 315
Taille : 52,0 Ko
    Michel.

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

Discussions similaires

  1. Peuplement d'une ontologie
    Par souma dh dans le forum Ontologies
    Réponses: 0
    Dernier message: 27/04/2015, 21h40
  2. Récupération de la valeur d'une DBLookupComboBox
    Par perdeak dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/12/2007, 09h14
  3. affecter une valeur par defaut a un dblookupcombobox
    Par bkadje dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/11/2006, 14h11
  4. Requête paramétrée qui remplit une DBLookUpComboBox
    Par navis84 dans le forum Bases de données
    Réponses: 6
    Dernier message: 02/12/2004, 21h23
  5. [DBLookupComboBox] Avoir un curseur sur une DBLookupCoboBox
    Par webbulls dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/05/2004, 11h52

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