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

C++Builder Discussion :

Probleme de liaison entre deux tables d'une base de donnees


Sujet :

C++Builder

  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut Probleme de liaison entre deux tables d'une base de donnees
    Bonsoir:
    Apres avoir fait des essais avec ADO, je prepare un projet de base de donnees, j'en suis a la formalisation sur papier afin de percevoir les besoins, cette base est prevue avec deux tables.
    Il me reste un probleme je ne vois pas comment assurer le lien entre ces deux tables.
    Le projet se compose d'une table auteur d'une table livres.
    Par exemple si j'appel un auteur je sort le descriptif de cet auteur mais si je le desire je sort les livres qu'il a ecrit, c'est la liaison entre l'auteur et les livres qui me pose probleme je ne vois pas comment faire ce lien.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  2. #2
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir Blondelle,

    Quels sont les champs prévus dans la table 'Livre' ?
    Dans cette table, n'y a t il pas tout simplement moyen de faire une référence a l'auteur ? (pour chaque tuple ...) sur laquelle on pourrait filtrer ou 'requêter' ?

    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci pour ta reponse Sunchaser:
    Les tables auteurs livres c'est pour l'exemple, la table livres va avoir une trentaine de champs, la table auteur est la table principale et c'est a partir de celle ci que je vais si besoin aller chercher les livres correspondant a l'auteur, ce nombre de livres ne sera pas constant, suivant l'auteur il y en aurra un nombre different mais je voudrais tous les lister.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  4. #4
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    De mon côté, ce que j'aurais fait (mais qui peut être considéré comme 'basique' voire obsolète par de vrais spécialiste des BD) est de garder une référence (donc un champs) a l'auteur pour chaque livre de la table 'Livres'.
    Ainsi, lors d'une sélection d'un auteur dans la table principale, je filtre la table 'Livres' en me servant de la valeur représentée par l'auteur.
    J'aurais utilisé un des évènements de TTable ou de TDataSet représentant la table principale, ou des composants correspondants a ce que tu utilises dans ton cas, pour automatiser le 'phénomène'.
    Ou dans le cas d'Interbase, utilisé un 'Trigger' directement dans la BD ou qqchose dans cet de cet ordre en tout cas ...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je vais utiliser une base Access avec ADO.
    Si j'ai bien compris tu te reserve un champ pour l'auteur dans la table livre.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  6. #6
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Ben voui ... c'est peut être pas très fineau mais c'est ainsi que j'aurais fait.
    Et j'aurais surement testé avec un des évènements de TAdoDataset, comme AfterScroll, pour lancer le filtre (ou la requête) sur la table Livre.

    En espérant t'aider,
    @ +

    //EDIT : mais je suis peut être dans l'erreur ...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Points : 537
    Points
    537
    Par défaut
    Même dans Access tu peux faire des relations entre tables avec des liens et des référencement et des contrôles d'intégrité référencielle.
    L'avantage c'est par exemple si tu supprime un enregistrement auteur, ses oeuvres peuvent aussi être supprimées automatiquement.

    Maintenant pour ton besoin, il faut penser à créer un champ unique et indexé par exemple en NumAuto (incrément automatique et unique) qu tu appelera IdAuteur.
    Dans ta base Livre tu vas prévoir ce même champs en entier long indexé avec doublons.
    Tu créé le lien soit avec ADO soit directement sous Access.
    Plusieurs type de lien existent (mise à jour en cascade, effacement en cascade, type de jointure avec inclusion (trois types).

    Ensuite tu n'as plus qu'à faire ton query avec filtre et/ou Dbgrid avec champs maitres et champs détails (deux grids).

    Tu peux aussi ne pas mettre de liens, mais la c'est à toi de faire ton intgrité.

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci pour tes reponses Sunchaser, je vais regarder les commandes que tu a donne,
    c'est peut être pas très fineau
    Je pense qu'il faut faire simple c'est ce qui pose le moins de problemes.
    Merci pour ta reponse Fbartolo.
    Vos deux avis se rejoignent, je ne vais pas utiliser Access, je sais creer un champ indexe automatique, par contre le champ de la Table livres c'est moi qui doit le servir pour faire la liaison, pour ce qui est des mise a jour, inclusion, effacement en cascade Fbartolo a tu un exemple en ADO svp, je sais readapter du code existant mais la je n'ai rien sur le sujet.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Points : 537
    Points
    537
    Par défaut
    Non rien de plus que dans ta discussion:
    http://www.developpez.net/forums/sho...d.php?t=303525
    Pour la création en SQL.

    Perso, sauf cas particulier j'utilise Access pour construire le MCD et la base.

    ensuite une fois que les liens sont fait, c'est du classique SQL ou ADO pour la modification, supression...

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci pour la reponse Fbartolo:
    Je continue mes recherches.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #11
    Membre éclairé
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Points : 786
    Points
    786
    Par défaut
    Citation Envoyé par blondelle
    Merci pour ta reponse Sunchaser:
    Les tables auteurs livres c'est pour l'exemple, la table livres va avoir une trentaine de champs, la table auteur est la table principale et c'est a partir de celle ci que je vais si besoin aller chercher les livres correspondant a l'auteur, ce nombre de livres ne sera pas constant, suivant l'auteur il y en aurra un nombre different mais je voudrais tous les lister.
    Salut !
    Je suis de même avis, sauf que je n'utiliserai pas le type auto-incremetal, puisque j'avais des problèmes lors de l'insertion des tuplets en utilisant des requête SQL, j'avais un message dans le genre : "Auto-Incremenatle type is not supported on SQL"; Je sais pas si c'est spécifique à PARADOX, peut être qu'il n y a pas de ce genre de problème dans ACCESS.

    C'est juste une remarque, ensuite ta table LIVRE va avoir 30aine champs, elle doit sûrement être réduite, et dévisée en plusieur tables de façon mieux structuré, et ceci te permetra d'avoir un accés à tes données plus rapide, et moins gourmant.


    Espérant t'aider !

    Bonne chance.
    Plus tu prends part aux joies et chagrins des gens, plus ils te sont proches et chers. Mais c'est le chagrin et les problèmes qui vous rapprochent le plus.

    (Mark TWAIN)

  12. #12
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Bonjour,
    je me permets de mettre mon grain de sel...
    En effet, je suis surpris de voir nul part la notion de clé primaire et clé étrangère..c'est pourtant exactement le principe ici.

    Je ne vois pas en quoi ce serait obsolète,c'est la base des bases de données.
    ici, l'IDAuteur (automatique ou pas) est la clé primaire de la table Auteur, garantissant l'unicité de chaque enregistrement (il est tjrs possible de créer des clefs alternatives par le biais de contrainte, ex : nom / prénom).
    On reprendra donc cet IDAuteur dans la table Livres sous forme de clé étrangère, garantissant ainsi l'intégrité référentielle, comme le souligne FBartolo). C'est-à-dire que l'on ne pourra avoir d'IDAuteur dans LIvres qui n'est pas de correspondance dans Auteurs. Cela fait parti des mécanismes classiques des SGBDR.

    Cependant, ce choix suppose qu'il n'y ait qu'un auteur par livre.
    Il conviendra d'ajouter une table d'association entre les deux table si l'on souhaite traiter plusieurs auteurs par livre.

    en espérant aider
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  13. #13
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Citation Envoyé par Interruption13h
    C'est juste une remarque, ensuite ta table LIVRE va avoir 30aine champs, elle doit sûrement être réduite, et dévisée en plusieur tables de façon mieux structuré, et ceci te permetra d'avoir un accés à tes données plus rapide, et moins gourmant.
    .
    Honnétement, 30 champs c pas grand chose...on ne découpe que si cela a lieu d'être. Cette pratique me semble avoir disparu avec l'apparition de capacités de traitement bien meilleures.
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  14. #14
    Membre éclairé
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Points : 786
    Points
    786
    Par défaut
    Citation Envoyé par say
    Honnétement, 30 champs c pas grand chose...on ne découpe que si cela a lieu d'être. Cette pratique me semble avoir disparu avec l'apparition de capacités de traitement bien meilleures.
    Oui c'est sûre, mais ce que je veux dire ce que je me demande bien quel sont ces champs, puisque je voi qu'une dixaine de champs : Reference,Titre,Id_Auteur,Id_Catégorie... mais 30 !!?

    Et c'est pas parceque la capacité de traitement a été améliorée qu'on doit forcément changer cette pratique

    A+
    Plus tu prends part aux joies et chagrins des gens, plus ils te sont proches et chers. Mais c'est le chagrin et les problèmes qui vous rapprochent le plus.

    (Mark TWAIN)

  15. #15
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Citation Envoyé par Interruption13h
    Oui c'est sûre, mais ce que je veux dire ce que je me demande bien quel sont ces champs, puisque je voi qu'une dixaine de champs : Reference,Titre,Id_Auteur,Id_Catégorie... mais 30 !!?

    Et c'est pas parceque la capacité de traitement a été améliorée qu'on doit forcément changer cette pratique

    A+
    Je crois que Auteur et Livres ne sont que des exemples
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  16. #16
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci Interruption13h Merci say:
    Bien vue say c'est un exemple pour des raisons professionel je ne peu pas donner le contenu
    Merci pour vos reponses je vois que mon poste sucite de l'interet, apres reflextion suite aux differentes reponses je vais utiliser le nom de l'auteur plus la clef primaire de la Table Auteur car dans les Noms il risque d'y avoir des Homonymes.
    Pour les differents champs je ne peu pas les regrouper car il peuvent etre mis a jour independament plus facilement.
    Pour ce qui est des problemes d'ecriture des commandes SQL c'est vraiment la galere a voir elle sont chaque fois a adapter.
    Je tiens a conserver que deux tables car il me faut imprimer le contenu d'une ligne de la Table Autheur et de la Table livre chaque fois dans une feuille Excel, et je ne veu pas me casser la tete
    Je peu avoir un Autheur sans livre mais pas de livres sans Autheur.
    Pour le champ "clef primaire" quel est la requette pour la rendre automatique svp.
    Si j'arrive a m'en sortir je pense faire un petit tuto depuis la creation jusqu'au compactage d'une base de donnee en dynamique (avec mes Autheurs et mes Livres)
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  17. #17
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Citation Envoyé par blondelle
    apres reflextion suite aux differentes reponses je vais utiliser le nom de l'auteur plus la clef primaire de la Table Auteur car dans les Noms il risque d'y avoir des Homonymes.
    si tu as une clef primaire, je vois pas pourquoi tu veux utiliser le nom en plus...
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  18. #18
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    C'est pour les recherches elles vont se faire sur le nom de l'Autheur c'est pour cela que j'avais pense aux deux champs
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  19. #19
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Dis moi Blondelle, un ' Autheur ', c'est un Auteur qui a pris du 'h' ? Pour l'inspiration ?

    (roo, mince, j' vais encore me faire modérer moi ...)

    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  20. #20
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Oui c'est un H aspire comme.....
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

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

Discussions similaires

  1. Probleme de liaison entre un formulaire et une base de données chez OVH
    Par Raphaelphp dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 29/11/2011, 12h22
  2. Probleme de relation entre deux tables
    Par Mimisio dans le forum Modélisation
    Réponses: 5
    Dernier message: 17/07/2007, 14h30
  3. Liaison entre deux tables
    Par knoll dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/02/2007, 17h23
  4. [VBA-A] liaison entre deux tables
    Par lumbroso dans le forum VBA Access
    Réponses: 16
    Dernier message: 01/06/2006, 10h22
  5. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11

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