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

Bases de données Delphi Discussion :

Colonne lookupcombobox à géométrie variable


Sujet :

Bases de données Delphi

  1. #1
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 949
    Par défaut Colonne lookupcombobox à géométrie variable
    Bonjour,

    J'ai 1 dbgrid permettant de gérer par exemple des voitures. il y a donc (pour faire simple) 1 colonne Marque et 1 autre Modèle.

    Comment faire pour que la lookupcombo Modèle propose toujours la liste des modèles de la marque sélectionnée? que ce soit lors de l'insertion d'un véhicule, ou quand on "butine" dans la grille.
    J'ai bien sûr à disposition la liste des modèles de chaque marque...

    Pour 1 insertion, après sélection de la marque, j'arrive à charger les modèles correspondant, mais les modèles des autres marques sont raz dans la grille.

    Une idée?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet :resolu: - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 129
    Par défaut
    Un MasterSource en plus pour la ListSource ?
    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

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 717
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Je vois plusieurs solutions dépendant de ce qui est voulu : la possibilité ou non d'afficher tous les véhicules ou pas.

    Dans le cas où seul les véhicules d'une marque serait à afficher, bien évidemment le mastersource est une possibilité,

    Utilisant Firedac, perso, étant plus Query que Table, j'utiliserai
    avec mastersource
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MODELE FROM MODELES WHERE MARQUE=:MARQUE
    sans mastersource
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fdQModeles.Open('SELECT MODELE FROM MODELES WHERE MARQUE=:M',[ComboBox.Text]);

    Dans le second cas je remplirai un combobox mais avec une variante
    (en utilisant une base Firebird)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    WITH A AS 
    (SELECT NULL FROM RDB$DATABASE 
    UNION
    SELECT MARQUE FROM MARQUES) 
    SELECT A.MARQUE FROM A ORDER BY 1 NULLS FIRST

    Dans ce cas je jouerai avec le onCloseUp du combobox et les possibilités de Firedac
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ComboxBox.Text.isEmpty 
       then  fdQModeles.Open('SELECT MODELE FROM MODELES ORDER BY MARQUE')
       then  fdQModeles.Open('SELECT MODELE FROM MODELES WHERE MARQUE=:M',[ComboxBox.Text]);
    NOTE : non testé, j'ai un petit doute sur le combobox.text

    N.B. Pour ce qui est des insertions, bien sûr j'utiliserai un onNewrecord sur l'ensemble de données MODELES pour initialiser la colonne MARQUE
    Bien évidement, mon utilisation de SQL oblige l'utilisation de FDSQLUpdate
    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

  4. #4
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 949
    Par défaut
    Bonjour, et merci pour ces retours.

    Cependant
    Dans le cas où seul les véhicules d'une marque seraient à afficher
    n'est justement pas mon contexte... et ce qui pose problème car la liste de référence des modèles me semble unique pour le grid car elle résulte d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select MODELE ... where MARQUE=
    . Et quand je passe (par exemple) d'une Peugeot à une Renault, je dois recharger les modèles, du coup tout ce qui n'est pas Renault ne trouve plus son modèle dans la nouvelle liste, et la cellule correspondante est raz.

    J'ai peut-être une piste à explorer car mon compo grid dispose d'une possibilité de "InPlaceEditor" référençant 1 combo classique qui vient s'ouvrir sur la cellule.
    Je vais tenter:
    • une liste de tous les modèles pour le grid
    • l'allocation dynamique des modèles selon la marque pour alimenter la liste proposée par ce combo

    Affaire à suivre...

    PS: pour 1 grid "de base", il est sûrement possible de simuler ça en faisant apparaitre un combo au niveau des coordonnées de la cellule "modèle" cliquée?
    P-PS : ça ressemblerait à ta solution Sergio ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet :resolu: - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 717
    Billets dans le blog
    65
    Par défaut
    Tu as aussi la solution (que j'aime moins) la propriété Filter et Filtered
    dans le OnCloseup du combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FDQModele.Filter:=Format('Marque=%s',[QuotedStr(combobox.text)]);
    FDQModele.Filtered:=not Combobox.text.isEmpty
    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

  6. #6
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 949
    Par défaut
    J'ai avancé avec mon "InPlaceEditor"...

    Je suis initialement partir sur la création dynamique de StringList nommé SL<marque> contenant les modèles de cette marque afin d'alimenter les items du Tcombobox.

    Mais je me suis fait avoir car le FindComponent ne peut trouver que des composants et, pas de bol le StringList n'en est pas un

    Je me suis donc rabattu sur un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDictionary<string, TStringList>
    le string recevant la marque.

    Ensuite, j'utilise qui me fournit la StringList que j'assigne aux items du ComboBox.


    Je pense qu'une telle approche peut être utilisée en l'absence d'un "InPlaceEditor" en faisant apparaitre le ComboBox par dessus la cellule.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet :resolu: - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

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

Discussions similaires

  1. Sélection colonne de façon variable !
    Par AllyKo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2008, 14h02
  2. Réponses: 5
    Dernier message: 26/03/2008, 22h48
  3. nom de colonne dans une variable
    Par cyclone_yas dans le forum SQL
    Réponses: 12
    Dernier message: 27/12/2006, 11h41
  4. Colonnes fixes lignes variables
    Par vid2006 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 14/09/2006, 15h05
  5. affecter le résultat de chaque colonne à une variable
    Par zut94 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/11/2005, 18h35

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