jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009
-
21 avril 2009 à 17:24
confidentielconfidentiel
Messages postés1Date d'inscriptionmercredi 25 mars 2009StatutMembreDerniè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...
jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009 27 avril 2009 à 14:22
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.
jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009 22 avril 2009 à 10:28
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
jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009 22 avril 2009 à 11:23
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 !
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 22 avril 2009 à 12:12
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
jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009 22 avril 2009 à 12:33
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.
jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009 22 avril 2009 à 14:11
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)