Comment faire de la table la partie détail d'un autre ensemble de données
Remonter à Création de relations maître/détail
Les propriétés MasterSource et MasterFields d'un ensemble de données de type table peuvent être utilisées pour établir des relations un-à-plusieurs entre deux ensembles de données.
La propriété MasterSource permet de spécifier une source de données utilisée par la table pour extraire des données de la table maître. Cette source de données peut être liée à n'importe quel type d'ensemble de données. Par exemple, en spécifiant dans cette propriété la source de données d'une requête, vous pourrez lier un ensemble de données client en tant que détail de la requête, de sorte que cet ensemble de données client se charge du suivi des événements survenant dans la requête.
L'ensemble de données est lié à la table maître par son index en cours. Avant d'indiquer quels champs de l'ensemble de données maître sont suivis par l'ensemble de données détail, définissez l'index de l'ensemble de données détail commençant par les champs correspondants. Vous pouvez utiliser la propriété IndexName ou la propriété IndexFieldNames.
Lorsque vous avez spécifié l'index à utiliser, servez-vous de la propriété MasterFields pour indiquer la ou les colonnes de l'ensemble de données maître correspondant aux champs d'index de la table détail. Pour lier des ensembles de données à partir de plusieurs noms de colonnes, séparez les noms des champs par des points-virgules :
Parts.MasterFields := 'OrderNo;ItemNo';
Parts->MasterFields = "OrderNo;ItemNo";
Pour créer des liens fiables entre deux ensembles de données, vous pouvez utiliser le concepteur de liaisons de champs. Pour ce faire, après avoir spécifié un MasterSource et un index, double-cliquez sur la propriété MasterFields dans l'inspecteur d'objets.
En suivant les procédures décrites ci-dessous, vous pourrez créer une fiche dans laquelle un utilisateur pourra parcourir les enregistrements sur des clients et affichera toutes les commandes passées par le client en cours. La table maître est CustomersTable, la table détail OrdersTable. L'exemple utilise le composant BDE TTable, mais vous pouvez utiliser les mêmes méthodes pour lier n'importe quels ensembles de données de type table.
Pour créer une simple fiche
- Placez deux composants TTable et deux composants TDataSource dans un module de données.
- Définissez les propriétés des composants suivants,
Composant | Propriété |
---|---|
Premier TTable |
DatabaseName: DBDEMOS TableName: CUSTOMER Name: CustomersTable |
Second TTable |
DatabaseName: DBDEMOS TableName: ORDERS Name: OrdersTable |
Premier TDataSource |
Name: CustSource DataSet: CustomersTable |
Second TDataSource |
Name: OrdersSource DataSet: OrdersTable |
- Placez deux composants TDBGrid sur une fiche.
- Choisissez Fichier > Utiliser l'unité pour indiquer que la fiche doit utiliser le module de données.
- Attribuez à la propriété DataSource de la première grille la valeur "CustSource" et à la propriété DataSource de la deuxième grille la valeur "OrdersSource".
- Définissez la propriété MasterSource de OrdersTable par "CustSource". Cela lie la table CUSTOMER (la table maître) à la table ORDERS (la table détail).
- Double-cliquez dans la zone de la valeur de la propriété MasterFields dans l'inspecteur d'objets pour appeler le concepteur de liaisons de champs afin de définir les propriétés suivantes :
- Dans le champ Index disponibles, choisissez CustNo pour lier les deux tables sur le champ CustNo.
- Sélectionnez CustNo dans les deux listes de champs Champs détail et Champs maître.
- Cliquez sur Ajouter pour ajouter cette condition de jointure. Dans la liste Champs joints, "CustNo -> CustNo" apparaît.
- Cliquez sur OK pour valider vos sélections et quitter le concepteur de liaisons de champs.
- Pour afficher des données dans les grilles de la fiche, mettez les propriétés Active de CustomersTable et OrdersTable à True.
- Compilez l'application et exécutez-la.
Si vous lancez l'application maintenant, vous pouvez constater que les tables sont liées et que quand vous vous déplacez sur un nouvel enregistrement de la table CUSTOMER, seuls apparaissent les enregistrements de la table ORDERS appartenant au client en cours.
Voir aussi
- Utilisation de tables détail imbriquées
- Data.Win.ADODB.TADOTable.MasterSource
- Datasnap.DBClient.TCustomClientDataSet.MasterSource
- Bde.DBTables.TTable.MasterSource
- IBX.IBTable.TIBTable.MasterSource
- Data.SqlExpr.TSQLTable.MasterSource
- Data.Win.ADODB.TCustomADODataSet.MasterFields
- Datasnap.DBClient.TCustomClientDataSet.MasterFields
- Bde.DBTables.TTable.MasterFields
- IBX.IBTable.TIBTable.MasterFields
- Data.SqlExpr.TSQLTable.MasterFields