Académique Documents
Professionnel Documents
Culture Documents
2 - Les Base de Données Lier Deux Tables (Suite BD)
2 - Les Base de Données Lier Deux Tables (Suite BD)
Relation maître-détail ou relation un-à-plusieurs entre deux tables
Exemple
Programme qui gère les prêts de livres dans une bibliothèque.
Informations nécessaires :
Les clients (coordonnés, n° de la carte d'adhérent ...). Ces renseignements sont enregistrés dans une
table.
Les mouvements de livres (qui les a emprunté, quand, sont-ils rendus ...). Ces mouvements seront
enregistrés dans une autre table.
Lorsqu’on consulte les mouvements de livres, on peut voir en même temps les coordonnés de l'emprunteur.
A chaque fois qu’un enregistrement de la table contenant un mouvement est pointé, la table contenant les
clients se place automatiquement sur l'enregistrement correspondant au client correspondant.
C'est une relation un-à-plusieurs car à un client ne correspondra qu'un seul enregistrement de la table des clients
(c'est en fait un champ indexé). Par contre, il peut y avoir plusieurs enregistrements de la table des mouvements
qui contiennent le même client dans le champ correspondant.
Création des 2 tables en utilisant l’alias TEST
Table ANNUAIARE pour les clients
Mettre les champs NumClient et Nom en Index
Delphi affiche à gauche les champs indexé de Table1 et à droite, tous les champs de Table2.
Cliquez sur le champ NumClient de la colonne Champs Détail et sur NumClient de la colonne Champs maître,
puis sur le bouton Ajouter.
Le lien est fait : un enregistrement de Table2 sera lié à un enregistrement de Table1 : celui qui a le même n° de
client. A noter que cela a changé les propriétés MasterFields et IndexFieldNames de Table1. MasterFields a pris
le nom du champ de Table2 (Client) qui doit être lié avec le champ de Table1 désigné par la valeur
d'IndexFieldNames (NumClient).
Faisons le point sur l'architecture
Table1 et Table2 pointent respectivement vers Annuaire.DB et vers Mouvements.DB à travers leurs
propriétés DataBaseName et TableName.
DataSource1 et DataSource2 pointent respectivement vers Table1 et Table2 et donc en fait vers
Annuaire.DB et Mouvements.DB. Il le font par le biais de leur propriété DataSet
Table1(Annuaire.DB) a une liaison de type maître-détail ("liaison un-à-plusieurs" ) avec la table
Mouvements.DB puisque l'on a placé DataSource2 dans sa propriété MasterSource.
Table1, (Annuaire.DB), sait que le champ NumClient de la table Annuaire.DB et le champ Client de la table
Mouvements.DB sont liés, par l'intermédiaire de ses champs MasterFields et IndexFieldNames.
Test du programme
Vérifiez que les propriétés Active de Table1 et Table2 sont à True. Lancez le programme (F9). A chaque
fois que l'on se déplace dans Table2, Table1 se place automatiquement sur l'enregistrement correspondant. Le
DBGrid1 n'affiche plus que lui.