Vous êtes sur la page 1sur 2

Module : Delphi mono poste

Thème : les bases de données (suite)


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

 Table Mouvements pour les mouvements

Utilisation d'un DataModule (module de données)


Placez sur la fiche un composant DataModule

 Connexions à nos tables


- Sur ce DataModule, placez 2 composants Table et 2 composants DataSource
- Entrez le nom de l'Alias de notre base de donné dans le champ DataBaseName de Table1 et Table2

Faisons pointer Table1 vers la table Annuaire.DB modifiant sa propriété TableName :

Faisons de même pour Table2 mais en le faisant pointer vers Mouvements.DB :

Affecter Table1 à la propriété DataSet de DataSource1


et Table2 à la propriété DataSet de DataSource2
Il faut maintenant placer des composants qui nous permettrons de visualiser, modifier ces tables.
Dans la Form1, placez deux DBGrid (Onglet ContrôleBD de la palette de composants).

Chapitre5 :Les bases de données « Lier deux tables » 1/2


Module : Delphi mono poste
Utiliser la propriété DataSource du DBGRID pour "brancher" chaque DBGrid vers leur DataSource respectif.
Ils pourront ainsi afficher respectivement les contenus de la Table 1 et de la Table2.
La propriété DataSource est vide, Delphi ne propose aucun.car les DataSources sont placés à l'extérieur de la
Fiche Form1.
Dans le uses de l'Unit1, il faut ajouter l' Unit2
uses
Windows, ... Forms, Dialogs, Unit2;
Affecter DataSource1 à la propriété DataSource du DBGrid1

et DataSource2 à la propriété DataSource du DBGrid2.


 Liaison des deux tables
Affectons DataSource2 à la propriété MasterSource de Table1 (ainsi, Table1 est lié à DataSource2 qui lui-
même est lié à Table2
Il reste à désigner quel champ de Table1 servira de lien avec quel champ de Table2.
Pour cela, cliquez sur les ... à droite de la propriété MasterFields de notre Table1

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.

Chapitre5 :Les bases de données « Lier deux tables » 2/2

Vous aimerez peut-être aussi