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
    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.

  2. #2
    Membre éprouvé
    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 : 54
    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
    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' ?

    @ +

  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
    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.

  4. #4
    Membre éprouvé
    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 : 54
    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
    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 ...

  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
    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.

  6. #6
    Membre éprouvé
    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 : 54
    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
    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 ...

  7. #7
    Membre chevronné

    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
    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
    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.

  9. #9
    Membre chevronné

    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
    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
    Par défaut
    Merci pour la reponse Fbartolo:
    Je continue mes recherches.

  11. #11
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    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.

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    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

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    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.

  14. #14
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    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+

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    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

  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
    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)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    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...

  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
    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

  19. #19
    Membre éprouvé
    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 : 54
    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
    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 ...)


  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
    Par défaut
    Oui c'est un H aspire comme.....

+ 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