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

 Delphi Discussion :

DBComboBox comment faire


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut DBComboBox comment faire
    Bonjour à tous,

    N'ayant pas utilisé Delphi depuis longtemps j'ai un petit problème de mémoire et je ne trouve pas ce que je veux sur Internet.

    J'ai un DBComboBox que je rempli de cette manière :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    procedure TFS42.FormShow(Sender: TObject);
    var
      q_modT, q_act : TQuery;
    begin
      OFB0505.Caption:=traduit('Déposant')+' '+in_depLib;
      OFB0506.Caption:=traduit('Magasin')+' '+in_magLib;
     
     
      q_modT:=tquery.create(nil); // + connexion base
      q_modT.Close; q_modT.SQL.Clear;
      q_modT.SQL.Add('select distinct MARXENT from ENTXRES where DEPXENT='''+in_dep+''' order by MARXENT');
      tryquery(q_modT,'open','');
      DBCB_modTrans.Items.Clear;
      While not q_modT.Eof do
      begin
        if q_modT.FieldByName('MARXENT').AsString = 'AE' then
          DBCB_modTrans.Items.Add('AERIEN')
        else if q_modT.FieldByName('MARXENT').AsString = 'MA' then
          DBCB_modTrans.Items.Add('MARITIME')
        else if q_modT.FieldByName('MARXENT').AsString = 'RO' then
          DBCB_modTrans.Items.Add('ROUTIER')   ;
        DBCB_modTrans.ItemIndex:=0;
        q_modT.Next;
      end;
    J'ai donc 3 valeurs dans ma DBComboBox qui viennent de mon champ MARXENT. Dans MARXENT ils sont égaux à AE, MA, ou RO et moi j'ai fait afficher dans ma liste leur libellé complet.

    J'ai un DBGrid associé à un DataSource lui même associé à une requête TQuery.

    Je veux qu'en fonction de la sélection dans ma DBCBComboBox cela modifie ma recherche qui affiche le contenu de mon DBGrid.

    Voici la requête pensée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       q_affich.SQL.Add('select CODXENT as CLIENT, TOUXENT as TOURNEE, decode(MARXENT, ''MA'', ''MARITIME'', ''AE'', ''AERIEN'', ''RO'', ''ROUTE'') ');
       q_affich.SQl.Add(' TRANSPORT, Count(CDEXENT) as NBCMD');
       q_affich.SQL.Add('from  ENTXRES, COLXRES where NUMXENT=NUMXCOL');
       q_affich.SQL.Add('and DEPXENT='''+in_dep+''' and TCDXENT=''3'' and (refxcol is not null)');
       q_affich.SQL.Add('and CODXENT like ''%'+UPPERCASE(e_cCli.Text)+'%'' and TOUXENT like ''%'+UPPERCASE(e_tourn.Text)+'%''');
       q_affich.SQL.Add('and MARXENT='''+DBCB_ModTrans.Text+'''');
       q_affich.SQL.Add('GROUP BY CODXENT, TOUXENT, MARXENT, REFXCOL');
       q_affich.SQL.Add('ORDER BY CODXENT');
    Comment faire pour récupérer ce qui a été sélectionné dans la DBCBComboBox et sur quel évènement ?

    J'ai mis la propriété Style de la DBCBComboBox à csDropDownList.

    Merci d'avance
    Windows XP
    Delphi 7

    WinDev Mobile 17

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    c'est pas tout simplement la valeur en cours du dataset lié à la combobox ?
    J'avoue ne pas avoir utilisé ça depuis longtemps.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pour ma part, je prends l'habitude d'utilisers Objets[] des Items de la TComboBox, utile pour stocker un code, un id, un libelle court et un libelle long (pour le hint par exemple)

    Objects[] couplé à l'ItemIndex fonctionnera à merveille pour retrouver tes petits par la suite

    Durant le OnChange du ComboBox ou encore OnCloseUp
    Remplace DBCB_ModTrans.Text par
    (DBCB_ModTrans.Items.Objects[DBCB_ModTrans.ItemIndex] as TObjectString)->Value pour modifier ton SQL,
    TObjectString est ajouté via AddObject,
    Value correspond au code DB et non au libellé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if q_modT.FieldByName('MARXENT').AsString = 'AE' then
          DBCB_modTrans.Items.AddObject('AERIEN', TObjectString.Create('AE'))
        else if q_modT.FieldByName('MARXENT').AsString = 'MA' then
          DBCB_modTrans.Items.AddObject('MARITIME', TObjectString.Create('MA'))
        else if q_modT.FieldByName('MARXENT').AsString = 'RO' then
          DBCB_modTrans.Items.AddObject('ROUTIER', TObjectString.Create('RO'))   ;
    Ne pas oublier le Free sur Objets[] à la fermeture de la fenêtre,
    dommage qu'il n'existe pas une propriété OwnsObjects sur Objects[]

    une requête paramétrée et préparée serait bien plus performante pour ce type de recherche et plus simple en terme de syntaxe que tous ces +''''+
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    Comment faire pour récupérer ce qui a été sélectionné dans la DBCBComboBox et sur quel évènement ?
    En général j'utilise le onCloseUp , ceci étant pourquoi une DBCombobox , une Combobox suffirait (ou me trompe-je ?)

    Citation Envoyé par shailetroll
    une requête paramétrée et préparée serait bien plus performante pour ce type de recherche et plus simple en terme de syntaxe que tous ces +''''+
    là , je suis tout a fait d'accord
    je rajouterai que pour plus de lisibilité et de 'normalisation' j'aurais spécifié la jointure entre les 2 tables TABLE1 JOIN TABLE2 ON

    pour ce qui est de récupérer la valeur la méthode (Objets) de ShaiLeTroll est (encore) la meilleure .

    Si l'on est un peu moins pointus et si j'ai bien compris , en regardant le mode de remplissage) on ne peut pas forcément se baser sur ItemIndex mais un case of sur des strings peut faire l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // str = paramètre pour la query
    case AnsiIndexStr(ComboBox.text, ['AERIEN', 'MARITIME', 'ROUTIER']) of
      0 :  Str = 'AE'
      1 :  Str = 'MA'
      2 :  Str = 'RO'
    end;
    d'un autre coté si je regarde les valeurs un str=Copy(combobox.text,1,2) ferait également l'affaire

    autre chose m'intrigue , il me semble que l'on pourrait simplifier le code de remplissage de la combobox simplement en 'améliorant' la SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct decode(MARXENT, ''MA'', ''MARITIME'', ''AE'', ''AERIEN'', ''RO'', ''ROUTE'') from ENTXRES where DEPXENT='''+in_dep+''' order by MARXENT
    ce qui éviterai ces ifs disgracieux ;-) , encore une fois un requête paramétrée serait mieux
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Comme je dois rendre ce projet rapidement j'ai fait au plus vite et j'ai donc utilisé une combobox (je dois néanmoins utiliser un DBComboBox pour un autre filtre de recherche).

    J'ai suivi vos conseils et utilisé une requête paramétrée :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
      if cb_modTrans.Text = 'MARITIME' then
        x_modTrans := 'MA'
      else if cb_modTrans.Text = 'AERIEN' then
        x_modTrans := 'AE'
      else if cb_modTrans.Text = 'ROUTIER' then
        x_modTrans := 'RO';
     
       q_affich.Close; q_affich.SQL.Clear;
       q_affich.SQL.Add('select CODXENT as CLIENT, TOUXENT as TOURNEE, decode(MARXENT, ''MA'', ''MARITIME'', ''AE'', ''AERIEN'', ''RO'', ''ROUTE'') ');
       q_affich.SQl.Add(' TRANSPORT, Count(CDEXENT) as NBCMD');
       q_affich.SQL.Add('from  ENTXRES, COLXRES where NUMXENT=NUMXCOL');
       q_affich.SQL.Add('and DEPXENT=:dep and TCDXENT=''3'' and (refxcol is not null)');
       if e_cCli.Text <>'' then
       begin
        q_affich.SQL.Add('and CODXENT like %:cod%');
        q_affich.ParamByName('cod').AsString := UPPERCASE(e_cCli.Text);
       end;
       if e_tourn.Text <> '' then
       begin
        q_affich.SQL.Add('and TOUXENT like %:tou%');
        q_affich.ParamByName('tou').Asstring := UPPERCASE(e_tourn.Text);
       end;
       q_affich.SQL.Add('and MARXENT=:mar');
       q_affich.SQL.Add('GROUP BY CODXENT, TOUXENT, MARXENT, REFXCOL');
       q_affich.SQL.Add('ORDER BY CODXENT');
       q_affich.ParamByName('dep').AsString := in_dep;
     
     
       q_affich.ParamByName('mar').AsString := x_modTrans;
     
     
     
       q_affich.Open;
    Cependant si je clique sur routier j'ai maritime qui s'affiche dans mon tableau. Si je clique sur maritime j'ai routier si je clique sur aérien j'ai maritime.... je ne comprend pas. En fait j'ai un temps de décalage... ça m'affiche le résultat de ma sélection précédente...
    J'ai fait le code sur le close up comme préconisé par SergioMaster
    Windows XP
    Delphi 7

    WinDev Mobile 17

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    Comme je dois rendre ce projet rapidement j'ai fait au plus vite et j'ai donc utilisé une combobox (je dois néanmoins utiliser un DBComboBox pour un autre filtre de recherche).
    Cependant si je clique sur routier j'ai maritime qui s'affiche dans mon tableau. Si je clique sur maritime j'ai routier si je clique sur aérien j'ai maritime.... je ne comprend pas.
    OnClick de la combobox ou onCloseUp de la combobox ?
    as-tu bien vérifié la valeur en mode debug ou par des showmessage ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    uses .. strutils
     
    // showmessage('avant '+cb_modTrans.Text);
    case AnsiIndexStr(cb_modTrans.Text, ['AERIEN', 'MARITIME', 'ROUTIER']) of
      0 :  x_modTrans := 'AE';
      1 :  x_modTrans := 'MA';
      2 :  x_modTrans := 'RO';
    end;
    // showmessage('result  '+x_modTrans.Text);
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    En fait j'ai un temps de décalage... ça m'affiche le résultat de ma sélection précédente...
    J'ai fait le code sur le close up comme préconisé par SergioMaster
    Windows XP
    Delphi 7

    WinDev Mobile 17

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    MéA culpa

    Essaye sur l'event onChange ou onSelect

    le onCloseup change l'itemIndex mais se produit avant la modification du texte
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Nickel merci
    J'ai utilisé le OnSelect
    Je laisse le topic ouvert le temps de gérer mon autre combobox...
    Windows XP
    Delphi 7

    WinDev Mobile 17

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Je ne vois pas l'intérêt d'utiliser des DBCombobox pour récupérer des paramètres de query !
    Ceci dit en regardant le DBComboBox je remarque que ce dernier n'a ni event OnCloseUp ni on Select (logique quelque part puisque lié a un datasource) par contre il a le onChange

    ce que j'utilise beaucoup aussi dans ce genre de cas c'est le DBlookupCombobox non lié a un Datasource , uniquement au ListSource
    inconvénient majeur la listesource doit rester ouverte
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Ben j'essaie justement de paramétrer mon DBComboBox mais rien à faire son évènement OnChange ne se déclenche pas.

    je vais regarder du côté DBLookUp mais je ne sais pas comment il fonctionne ... Dans la ListSource je paramètre ma requête du coup ?
    Windows XP
    Delphi 7

    WinDev Mobile 17

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    Ben j'essaie justement de paramétrer mon DBComboBox mais rien à faire son évènement OnChange ne se déclenche pas.
    le fait est que je ne voie toujours pas le pourquoi d'un combobox ? c'est imposé ?
    je vais regarder du côté DBLookUp mais je ne sais pas comment il fonctionne ... Dans la ListSource je paramètre ma requête du coup ?
    oui , mais comme dit plus haut , il faut : ajouter un datasource et laisser ouvert
    la requête récupérant les données d'où mon
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Ah oui pardon. Ils veulent une zone de liste déroulante contenant les codes activités existants.

    En fait j'ai crée un datasource (Comment faire pour le laisser ouvert en permanence ?), je lui ai associé en dataset la requête q_act contenant ma requête de sélection des codes activité.
    Et sur mon composant DBLookUp j'ai mis :

    - ListSource : nomDataSet
    - DataSet : requête q_act
    - ListField : NATXENT (champ contenant mon code activité)

    Mais rien ne s'affiche dans ma DBLookUp, elle est même grisée il semblerait.
    Windows XP
    Delphi 7

    WinDev Mobile 17

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    certainement parce que la query n'est pas open !

    (Comment faire pour le laisser ouvert en permanence ?)
    un Query.Open , mais pas de close avant la fin du programme , c'est pour cela que je décote cette solution
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    J'ouvre ma requête q_act sur le FormShow mais ça ne change rien :

    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
    16
    17
    18
    19
    20
    procedure TFS42.FormShow(Sender: TObject);
    begin
      OFB0505.Caption:=traduit('Déposant')+' '+in_depLib;
      OFB0506.Caption:=traduit('Magasin')+' '+in_magLib;
     
     
     
     (* q_act.SQL.Add('select distinct NATXENT from ENTXRES where DEPXENT=:dep order by NATXENT');
      q_act.ParamByName('dep').AsString := in_dep;
      tryquery(q_act,'open','');
      DBCB_codAct.Items.Clear;
      While not q_act.Eof do
      begin
        DBCB_codAct.Items.Add(q_act.FieldByName('NATXENT').AsString);
        DBCB_codAct.ItemIndex:=0;
        q_act.Next;
      end;       *)
      q_act.Open;
     
    end;
    Windows XP
    Delphi 7

    WinDev Mobile 17

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    En supposant , ce qui suit :

    une TQuery :q_act, un TDataSource : DS_Qact relié a ce query (datasource=q_Act)

    et un dblookupcombox relié de cette manière :
    ListSource= DS_QAct
    ListField = NAT
    KeyField = NAT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    q_act.SQL.Add('select distinct NATXENT as NAT from ENTXRES where DEPXENT=:dep order by NATXENT');
      q_act.ParamByName('dep').AsString := in_dep;
      tryquery(q_act,'open','');
    en présumant que : tryquery(q_act,'open',''); cecode fait l'ouvertue de la query ?

    la query devrait être ouverte et le dblookupcombobox 'actif'
    bioen sur on utilisera l'evenement oncloseup dans ce cas et la valeur KeyValue plutôt que Text

    Mais , une fois de plus , je ne comprends pas pourquoi il est impératif d'utiliser des composants de contrôle de données (DBcombobox,DBlookupCombobox etc...) pour une chose qui a mon avis n'en a pas besoin
    Vous ne voulez pas Changer des données mais uniquement sélectionner une valeur dans une liste , certes une liste remplie par l'intermédiaire d'une requête mais absolument pas liée a un champ modifiable comme lorsque l'on rempli un formulaire par exemple .

    Autre chose 'étrange' c'est qu'il n'y ait pas de table de référence par exemple pour vos modes de transport sélectionner les différents mode à partir d'un ensemble de commandes/bordereaux de livraison est certainement couteux en temps si l'ensemble de ces données est important !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Alleluia ça marche, il me manquait le KeyField et c'est la propriété DataSet de mon DataSource qui contient mon q_act.

    Mais , une fois de plus , je ne comprends pas pourquoi il est impératif d'utiliser des composants de contrôle de données (DBcombobox,DBlookupCombobox etc...) pour une chose qui a mon avis n'en a pas besoin
    Vous ne voulez pas Changer des données mais uniquement sélectionner une valeur dans une liste , certes une liste remplie par l'intermédiaire d'une requête mais absolument pas liée a un champ modifiable comme lorsque l'on rempli un formulaire par exemple .
    Je ne comprend pas que devrais-je utiliser à la place ?

    Autre chose 'étrange' c'est qu'il n'y ait pas de table de référence par exemple pour vos modes de transport sélectionner les différents mode à partir d'un ensemble de commandes/bordereaux de livraison est certainement couteux en temps si l'ensemble de ces données est important !
    Pour ce coup là ce n'est pas moi qui ai fait la structure des tables elle existe depuis très longtemps...
    Windows XP
    Delphi 7

    WinDev Mobile 17

  18. #18
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    Je ne comprend pas que devrais-je utiliser à la place ?
    le combobox, comme pour le mode de transport

    Pour ce coup là ce n'est pas moi qui ai fait la structure des tables elle existe depuis très longtemps...
    je m'en doutais
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Ah et du coup j'affecte ma requête directement au combobox ? J'ai jamais testé...

    En fait j'ai appris par habitude à utiliser des composants DB quand ils étaient alimentés par une base... Habitude scolaire ^^
    Windows XP
    Delphi 7

    WinDev Mobile 17

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Effectivement j'ai fait avec une combobox, beaucoup plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      With q_act do
      begin
        cb_test.Items.Clear;
        Close;
        SQL.Text := 'select distinct NATXENT from ENTXRES where depxent='''+in_dep+''' order by NATXENT';
        Open;
        While not eof do
        begin
          cb_test.Items.Add(FieldByName('NATXENT').AsString);
          Next
        end;
      end;
    Windows XP
    Delphi 7

    WinDev Mobile 17

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment faire une relation entre 3 dbcombobox
    Par meziane00 dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/04/2009, 22h47
  2. comment faire evoluer ma base vers interbase6
    Par toure32 dans le forum InterBase
    Réponses: 5
    Dernier message: 23/10/2002, 10h59
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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