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 :

Gérer une relation m:n avec un DbLookupComboBox


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 116
    Points : 45
    Points
    45
    Par défaut Gérer une relation m:n avec un DbLookupComboBox
    J'ai 3 tables reliées entre elles par des relation 1:n de la manière suivante:

    Table1 n------1 Table2 1---------n Table3

    L'existence de la table2 se borne donc à permettre une raltion m:n entre table1 et table2, rien de plus.

    Mon problème est: comment gérer ça avec un DbLookupComboBox (enfin c'est celui que je trouve le plus adéquat). Je sais que ça sent la requête SQL à plein nez mais mes cours de SQL sont vraiment trop loins

    Edit: je donne plus de précision pour qu'on comprenne pourquoi je m'amuse à faire ça:

    Table1 contient des noms (+clé primaire évidemment) de Collection (de photos)
    La table3 contient.. les photos (+détails et clé primaire).

    Vu qu'on collection peut contenir plusieurs photos (ah be, oui il vaut mieux) mais qu'une photo peut se retrouver dans plusieurs collection (bah oui logique), ben voilà faut gérer un relation m:n

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 454
    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 454
    Points : 24 866
    Points
    24 866
    Par défaut
    Le DbLookupComboBox sert pour des Dictionnaires en général, pour du n:n ça me parait douteux ... surtout qu'il est en valeur unique ...

    Normalement, tu as un formulaire pour saisir Table1, avec des DBEdit pour le nom, auteur ... ensuite, je mettrais, soit deux DBGrid (l'une étant les reliées donc Table2, l'autres les à relier Table3-Table2, comme dans les options de projet dans delphi avec les flèches) ou une TDBListBox ...

    Sinon, oui le SQL est un peu la base, ... et sela reste que du SELECT, rien de compliquer, je déteste la DB, mais on s'y fait ...
    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
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    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 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    il faut deja determiner ce que tu desire afficher sur ton dblookup
    soit tu affiche la table 1
    et la pas de soucis y'as pas de liaison a faire un dbcombo aurai suffit

    soit c'est toute les table 1 ayant une collection existante
    et la boom c'est la requette sql qui va bien



    @+ Phil
    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

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 116
    Points : 45
    Points
    45
    Par défaut
    En détail la manière dont cela devrait fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TCollection (IDCollection, Nom_Collection) ---> regroupe les collections
     
    TPhoto (IDPhoto, etc) ----> regroupe les renseignements sur les photos
     
    TCollectionPhoto (IDPhoto,IDCollection) ----> sert uniquement de table de liaison
    Ce qu'il faut afficher dans mon Form (où je rentre les renseignements des photos): Le Nom de la Collection.

    Le résultat dans les tables doit être que la table TCollectionPhoto crée un enregistrement (seulement si on choisi d'affecter une ou plusieurs collection(s) à un photo bien sûr) avec l'IDCollection et IDPhoto. SI on décide qu'une photo rentre dans 3 collections, il faut donc créer 3 enregistrements dans TCollectionPhoto.

    Cela me fait penser d'ailleurs qu'un ComboBox rend fort difficile la sélection de plusieurs collections donc je devrai faire avec des ListBox.

    J'espère que vous avez suivi

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 454
    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 454
    Points : 24 866
    Points
    24 866
    Par défaut
    Pour avoir fait une couche de persistance objet, et ayant peiné pour les relations n:m, j'ai tout à fait suivi, et je suis content que tu sois toi même arrivèe à la même conclusion que moi, la TListBox/TDBListBox ...
    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

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    et dbgrid, comme par example des détaille d'un BL,
    il y a N bl et N article
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 116
    Points : 45
    Points
    45
    Par défaut
    Mon problème essentiel est de savoir comment coder tout ça

    De plus je ne réussi pas à remplir ma DbListBox.
    Une Combo se remplit mais avec uniquement un enregistrement.
    J'y comprend rien.... J'ai trop de ADOTable sur la même connexion? Je pense pas que cela pose problème ...

  8. #8
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    dans un ADODataset(TCollectionPhoto) ajoute 1 champ (nomphoto) avec fielkind=fkLookup (référencer) sur TPhoto, et dans TCollection tu ajoute un chmps referencer sur TCollectionPhoto IDImage le lien et le résultat c'est le champ ajouté dans TCollectionPhoto
    insi,tu utlise un TDBLookUP,
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 116
    Points : 45
    Points
    45
    Par défaut
    Jamais (encore) utilisé de Dataset

    Je comprends bien ce que je dois faire, lui faire (au dataset) lire dans les tables (d'où le lookup) à quoi correspondent les clé étrangères stockées dans la table. Mais je ne vois pas où dans les propriétés du Dataset je dois régler les lookup. Ni comment répercuter les tables par après...

    Oui je sais je suis lourd avec toutes mes questions

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/08/2010, 21h34
  2. [AC-2003] gérer une base de données avec des codes barres
    Par franklin59 dans le forum Modélisation
    Réponses: 1
    Dernier message: 09/12/2009, 15h21
  3. établir une relation Maitre/Détail avec SQL
    Par SmileSoft dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/09/2009, 20h19
  4. Réponses: 2
    Dernier message: 01/04/2009, 16h44
  5. Gérer une relation Maitre détail
    Par codial dans le forum Bases de données
    Réponses: 10
    Dernier message: 16/10/2006, 10h01

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