Associer une liste deroulante à un DBGridSort [Résolu]

Messages postés
20
Date d'inscription
dimanche 9 novembre 2008
Dernière intervention
26 août 2009
- - Dernière réponse : confidentielconfidentiel
Messages postés
1
Date d'inscription
mercredi 25 mars 2009
Dernière intervention
4 octobre 2009
- 4 oct. 2009 à 08:35
Premier poste, soyez indulgent...
Alors ma grille contient :
une liste de nom et un booleen

Donc il faudrait que ma liste déroulante se crée lorsque je clique sur un des noms, ma liste s'appelle JvDBLookupCombo7, elle contient les champs de ma requete qui est en gros "select no_tableau, nom from Tableau;", mon lookup Field contient mon no_tableau et mon lookupdisplay le nom.
La liste déroulate marche super bien... Bon ok c'est pas dur.

Je voudrais associer ma colonne contenant les noms et s'appelant nom avec ma liste déroulante...

Merci d'avance pour toute aide...
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
3
Merci
Pour ça, jette un oeil sur cet article :
http://delphi.about.com/od/usedbvcl/l/aa101403a.htm

cantador

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
dimanche 9 novembre 2008
Dernière intervention
26 août 2009
3
Merci
Merci pour ton lien, je réponds que maintenant parce qu'il y avait tout de même une chose que je n'arrivais pas à faire. Je le dis pour les prochains qui auront le même problème que moi, dans la DBGrid, il fallait aller dans propriété -> controle->... Une fenêtre apparait, il faut ajouter un composant. On a alors ces deux propriétés :

ControlName -> Mettre le nom de votre liste déroulante, moi c'était JvDBLookupCombo
FieldName -> Mettre le nom du champ afficher dans votre colonne, moi c'était Nom (-> Nom du tableau)

Voila ! Merci à toi cantador pour ton aide.
Bonne journée à tous.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jenniguigui
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
0
Merci
Premier poste ? Commence le par "Bonjour" alors
Commenter la réponse de JulioDelphi
Messages postés
20
Date d'inscription
dimanche 9 novembre 2008
Dernière intervention
26 août 2009
0
Merci
Pardon.. Bonjour a tout le monde !!!
Commenter la réponse de jenniguigui
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
0
Merci
Bonjour,

Je voudrais associer ma colonne contenant les noms et s'appelant nom avec ma liste déroulante...

Pourrais-tu être plus précis ?

cantador
Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
dimanche 9 novembre 2008
Dernière intervention
26 août 2009
0
Merci
Bonjour, Bien sur alors :
j'ai trois tables sql,
Users(id_user, nom)
Lien_tableau_users(id_lien, idtableau, idusers, lecture(type booleen))
Tableau(id_tableau, nom)

Ma grille RxDBGridSort est liée à la requete1 : "SELECT     T.nom as Nom,  L.* FROM  Lien_tableau_users L LEFT OUTER JOIN  Tableau T ON L.idtableau = T.id_tableau
WHERE     (L.idusers =:NoUsers)"
(le paramètre :NoUsers correpond au numéro de l'utilisateur connecté)

Jusque là tout va bien, cela m'affiche une grille avec deux colonnes : Nom(index 0) et Lecture(index 1)

J'ai ensuite ma JvDBLookupCombo . Son lookup source représente la requête2 : "SELECT * FROM Tableau"
LookpupField = id_tableau
LookupDisplayIndex = 0
LookupDisplay = Nom
DataSource = mon lien vers la requete 1
DataField = idtableau

Ce que je veux faire, c'est que lorsque je double clique sur une case de ma colonne Nom de ma grille, ca ouvre cette JvDBLookupCombo. Je suis clair ou pas ? Parce que moi je me comprend forcément mais bon... Merci de me lire en tous cas
Commenter la réponse de jenniguigui
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
0
Merci
Je suis clair ou pas ? Parce que moi je me comprend forcément mais bon...




Ben oui, toute la difficulté est de faire comprendre son souci...

Est-ce que le champ "nom" de la table Users a la même signification que le champ "nom" de la table Tableau ?


et quel intérêt de faire ouvrir le LookupComboBox sur double-clic ?

cantador
Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
dimanche 9 novembre 2008
Dernière intervention
26 août 2009
0
Merci
Oui, et malheureusement pour moi, j'explique tres mal...
Non, les champs "Nom" de user et de tableau sont deux champs différents, on ne se sert que du champs nom de la table tableau.
Prenons un exemple, imaginons mes tables remplies comme cela :
     Users(10, Guillaume)
    Tableau[(1, Tableau1), (2, Tableau2), (3, Tableau3), (4, Tableau4), (5, Tableau5)]
    Lien_Tableau_Users[(1, 1, 10, vrai), (2, 3,10, faux), (3, 4, 10, vrai)]

Pour l'utilisateur Guillaume connecté j'aurais la grille suivante :
Nom            Lecture
Tableau1      vrai(une check box coché)
Tableau3      faux
Tableau4      vrai

Quand je double clique sur Tableau1 je veux une liste déroulante affichant :
Tableau1
Tableau2
Tableau3
Tableau4
Tableau5

Passons à l'intéret, En réalité la personne connecté sera l'administrateur, l'administrateur pourra modifier les droits de lecture des tableaux des utilisateurs, en l'occurrence ici de guillaume en décochant Tableau1 par exemple. L'admin peut également décider de supprimer de la liste "tableau3, faux" donc on aurait plus que Lien_Tableau_Users[(1, 1, 10, vrai), (3, 4, 10, vrai)] mais je veux aussi qu'il puisse modifier une ligne ! Par exemple transformer tableau1 en tableau 5 soit Lien_Tableau_Users[(1, 5, 10, vrai), (2, 3,10, faux), (3, 4, 10, vrai)], et pour cela je voulais une liste déroulante pour qu'il ne tape rien.
De plus, pour ajouter un "lien" j'ajoute une ligne vide, ensuite l'utilisateur pourra compléter le nom avec la liste déroulante, par exemple il fera ajouter, on aura :

Pour l'utilisateur Guillaume j'aurais la grille suivante :
Nom            Lecture
Tableau1      vrai (une check box coché)


Tableau3      faux


Tableau4      vrai
                    faux
Et en face de faux, sil double clique il pourra choisir un tableau !
Commenter la réponse de jenniguigui
Messages postés
20
Date d'inscription
dimanche 9 novembre 2008
Dernière intervention
26 août 2009
0
Merci
PS : double-clic ou un clic seulement, ca je m'en fiche !
Commenter la réponse de jenniguigui
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
0
Merci
Hou là là !!!

Est-ce que le champ "nom" de la table Users a la même signification que le champ "nom" de la table Tableau ?
et tu me réponds :
Oui, et malheureusement pour moi, j'explique tres mal...
Non, les champs "Nom" de user et de tableau sont deux champs différents, on ne se sert que du champs nom de la table tableau.
J'avais bien vu qu'il y avait deux champs différents, mais je reste sur ma faim quant à la signification de la donnée...
Mais comme je soupçonne que c'est la même nature, déjà, il y a une erreur dans la conception car tu stockes la même information à deux endroits différents (le meilleur moyen pour mettre la pagaille..)

Et de plus tu ne fais pas la différence entre les opérations de lecture et d'écriture..

Ce n'est pas facile et ton exercice mine de rien renferme pas mal de difficultés :

L'information ne doit être stockée qu'une seule fois et si on besoin de la faire apparaître à différents endroits alors on se sert de lookup
(Les relations entre les tables facilitent également la conception des requêtes et la gestion de la base)

En lecture seule, tout doit être verrouillé même pour l'admin !
Les dbLookupComboBox doivent s'ouvrir sur un clic et dans une opération d'écriture (ajout ou modification)

Enfin, les droits d'accès (gestion de profils) doivent être programmés par des fonctions qui permettent soit :

- Visible (invisible (visible or not visible) // infos secrètes
- Accès ou non accès (enabled or not enabled) // info connues mais non accessibles
- Lecture, edition (readOnly), suppression // modifiable ou non

cantador
Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
dimanche 9 novembre 2008
Dernière intervention
26 août 2009
0
Merci
oulala... Alors, quand j'ai écris "
pui, et malheureusement pour moi, j'explique tres mal... ", je répondais à "
Ben oui, toute la difficulté est de faire comprendre son souci..." donc la réponse à la question "Est-ce que le champ "nom" de la table Users a la même signification que le champ "nom" de la table Tableau ?" est Non ! , en réalité ma table user est bien plus compliqué et bourré de chose inutile ici , je l'ai simplifié mais si tu preferes ma table user peut etre


user(id_user, nomUser).

En fait, le booleen lecture est utilisé par la suite, en effet, si l'admin décide de mettre à false tableau1 pour guillaume bien lorsque guillaume se connectera, il n'aura plus accés a tableau1 ( J'aurais tableau1.enabled à false justement).
Ensuite, seul l'administrateur peut avoir accès à cette grille, il peut mettre à vrai et à faux la lecture des tableaux par utilisateurs, et la on s'en fiche de l'écriture puisque de toutes facons mes tableaux ne sont pas interactifs !

La modification du champs de lecture marche très bien, mon problème ca va juste être d'ajouter un tableau qui n'est pas dans la liste de lien_tab_utilisateur mais dans tableau.
Je saurais bien le faire en créant une nouvelle form avec un formulaire contenant une liste déroulante et une check box mais c'est juste moins estéthique et moins pratique. Je trouve. De plus, je sais quon peut le faire ! Je sais juste pas associé ma liste déroulante à la colonne Nom de ma grille.
Commenter la réponse de jenniguigui
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
0
Merci
mon problème ca va juste être d'ajouter un tableau qui n'est pas dans la liste de lien_tab_utilisateur mais dans tableau.




C'est que ta relation n'est pas bonne..

Tu fais le lien avec les tableaux alloués à l'utilisateur et non la liste complète des tableaux disponibles..

cantador
Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
dimanche 9 novembre 2008
Dernière intervention
26 août 2009
0
Merci
Oui justement, ce que je veux faire c'est allouer à l'utilisateur un nouveau tableau... donc en fait quand je veux un nouveau lien ca cré par defaut
lien_tab_users(6, null, 10, faux)
6-> id de ma table qui s'incrémente tout seul
null -> mon identifiant du tableau
10-> mon identifiant utilisateur
faux-> droit lecture

en visuel :
Nom    Lecture
 -----     faux

et je veux que lorsque l'utilisateur clique sur la case vide représenté par ---- s'affiche la liste déroulante des noms de tous les tableaux. En fait, si tu veux tout marche, ca affiche ce que je veux dans ma grille, si je modifie la case lecture ca modifie bien ce qu'il faut dans la base de données, je peux également supprimer une relation à l'aide de mon popup menu, quand je fais ajouter ca cré bien cette case. J'ai même mon LookupCombo qui fonctionne, il affiche bien un menu déroulant avec les noms que je veux, le seul problème c'est qu'elle s'affiche la ou je l'ai mis sur ma forme, elle n'est pas en relation avec ma grille quoi... je te ferais bien une capture d'écran mais on ne peut pas mettre d'image (ou je sais pas faire... hihi)
Commenter la réponse de jenniguigui
Messages postés
1
Date d'inscription
mercredi 25 mars 2009
Dernière intervention
4 octobre 2009
0
Merci
rigo
Commenter la réponse de confidentielconfidentiel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.