Editeur de la propriété MasterLink

Fonctionnalité de JBuilder Professionnel et Entreprise.

Pour afficher cet éditeur de propriété, choisissez la propriété masterLink dans l'inspecteur quand un DataSet détail et sélectionné dans le volet structure.

Dans JBuilder, vous pouvez joindre, ou lier, deux ensembles de données ayant au moins un champ commun et un objet MasterLinkDescriptor. Habituellement, une relation maître/détail est une relation un-à-plusieurs entre des ensembles de données. Les propriétés sont stockées dans l'objet MasterLinkDescriptor. Cet éditeur personnalisé est utilisé pour spécifier les propriétés du MasterLinkDescriptor afin de lier un DataSet détail à un DataSet maître sur au moins une colonne commune. Cette boîte de dialogue fournit également une option de test du lien maître/détail.

Il n'est pas nécessaire que le DataSet maître et le DataSet détail soient de même type. Par exemple, le DataSet maître peut être un QueryDataSet et le DataSet détail un TableDataSet. Vous pouvez lier un ensemble de données maître à plusieurs ensembles de données détail, en établissant le lien sur le même champ ou sur des champs différents. Vous pouvez aussi créer une relation maître/détail qui se développe en cascade en une relation un-à-plusieurs-à-plusieurs. Les relations plusieurs-à-un ou un-à-un peuvent être gérées dans un contexte maître/détail, mais ces types de relations sont de préférence pris en compte par l'utilisation de champs de référence, afin de voir toutes les données comme faisant partie d'un ensemble de données unique.

La colonne établissant le lien entre le DataSet détail et le DataSet maître doit contenir des données de même type dans les deux ensembles de données.

Voir Etablissement d'une relation maître/détail dans Guide du développeur d'applications de bases de données, un tutoriel qui utilise des fichiers JDataStore pour créer une relation maître/détail.

Dataset maître

Affiche les noms de tous les objets DataSet instanciés auxquels le DataSet peut être lié. Sélectionnez l'ensemble de données maître dans la liste pour activer le reste du dialogue.

Colonnes liées maître

Affiche les Columns sélectionnées dans le DataSet et utilisées pour établir la relation maître/détail. Il n'y aucune exigence d'index sur les Columns maître sélectionnées. Vous pouvez ajouter des colonnes à cette boîte liste en sélectionnant un nom de colonne dans la boîte liste "Colonnes maître disponibles" et en cliquant sur le bouton Ajouter aux liens maître.

Retirer une colonne

Cliquez pour supprimer l'entrée sélectionnée de la boîte liste Colonnes liées maître.

Colonnes liées détail

Affiche les Columns du DataSet détail utilisées pour établir la relation maître/détail. Il n'y aucune exigence d'index sur les Columns détail sélectionnées. Vous pouvez ajouter des colonnes à cette boîte liste en sélectionnant un nom de colonne dans la boîte liste "Colonnes détail disponibles" et en cliquant sur le bouton Ajouter aux liens détail.

Retirer une colonne

Cliquez pour supprimer l'entrée sélectionnée de la boîte liste Colonnes liées détail.

Colonnes maître disponibles

Affiche la liste des Columns du DataSet maître pouvant être utilisées pour établir le lien maître/détail. Sélectionnez la colonne que vous voulez utiliser pour établir la relation maître/détail, puis cliquez sur le bouton Ajouter aux liens maître pour ajouter la colonne à la boîte liste Colonnes liées maître.

Ajouter aux liens maître

Cliquez pour ajouter la colonne sélectionnée dans la boîte liste Colonnes maître disponibles à la boîte liste Colonnes liées maître.

Colonnes détail disponibles

Affiche la liste des Columns du DataSet détail pouvant être utilisées pour établir le lien maître/détail. Sélectionnez la colonne que vous voulez utiliser pour établir la relation maître/détail, puis cliquez sur le bouton Ajouter aux liens détail pour ajouter la colonne à la boîte liste Colonnes liées détail.

Ajouter aux liens détail

Cliquez pour ajouter la colonne sélectionnée dans la boîte liste Colonnes détail disponibles à la boîte liste Colonnes liées détail. Si la colonne correspondante dans la boîte liste Colonnes liées maître contient un type de données différent ou s'il n'existe pas de colonne correspondante dans la boîte Colonnes liées maître, la colonne sélectionnée n'est pas ajoutée à la boîte liste Colonnes liées détail.

Retarder la lecture des enregistrements détail jusqu'à ce que cela soit nécessaire

Désélectionnez cette option pour activer la lecture immédiate, dans laquelle une seule requête est utilisée pour lire l'ensemble de détail complet en un seul batch. Après l'exécution initiale de la requête et la lecture des résultats, les deux ensembles de données sont liés sur la base des données mises en mémoire cache, en utilisant les paramètres stockés dans le MasterLinkDescriptor.

Cochez cette option pour activer la lecture retardée, une vue moins cohérente des données. A chaque fois qu'une ligne maître est visitée pour la première fois, ses données détail sont lues en réexécutant la requête détail. La requête détail doit contenir une clause WHERE avec des liens à l'ensemble de données maître en utilisant des paramètres nommés. La méthode loadRow() de l'ensemble de données détail est appelée à chaque fois qu'une ligne maître est rencontrée en premier. Cette méthode extrait les valeurs de données des colonnes de liaison à partir du maître (tel qu'indiqué dans le MasterLinkDescriptor) et les lie à la requête. La requête est ensuite exécutée et ses résultats sont ajoutés à toutes les lignes déjà en mémoire cache de l'ensemble de données détail. Les noms de colonnes de l'ensemble de données maître doivent correspondrent (un par un) aux paramètres nommés de la clause WHERE du QueryDataSet détail.

Pour plus d'informations sur les relations maître/détail dans les requêtes paramétrées, voir la rubrique Requêtes paramétrables dans les relations maître-détail dans Guide du développeur d'applications de bases de données.

Pour plus d'informations sur la propriété fetchAsNeeded, voir la rubrique Extraction des détails dans le Guide du développeur d'applications de bases de données.

Cette option ne s'applique pas aux TableDataSets puisque toutes les données de ce composant sont extraites en une seule fois.

Autoriser les mises à jour en cascade

Cochez cette option pour permettre que les mises à jour apportées aux colonnes de liens de l'ensemble de données maître soient répercutées dans les lignes des ensembles de données détail. Si elle est cochée, les mises à jour sont effectuées en cascade sur les ensembles de données détail. Lorsque cette option est désélectionnée, les mises à jour apportées aux colonnes de liens ne sont pas autorisées si le maître comprend des détails. Ceci peut laisser des détails orphelins.

La sélection de cette option doit être réalisée avec précaution, spécialement dans les cas où vous avez plusieurs relations maître-détail chaînées, par exemple lorsqu'un ensemble de données détail est un maître pour un autre ensemble de données détail (etc). Normalement, dans ce cas, vous voulez que les mises à jour soient répercutées dans la chaîne des ensembles de données associés. Pour que cela soit possible, vous devez définir les propriétés cascadeUpdates et cascadeDeletes à chaque niveau. Sinon, la mise en cascade s'arrête à l'ensemble de données dont la propriété cascade a la valeur false, ou n'est pas cochée. Les mises à jour ou suppressions partielles (enregistrements orphelins) peuvent aussi se produire dans les cas où un ensemble de données de la chaîne maître-détail n'est pas modifiable. La logique de programme peut aussi entraîner que l'effet de cette propriété ne soit valable que pour des mises à jour partielles. Par exemple, un gestionnaire d'événement de suppression de editListener peut autoriser la suppression de certaines lignes détail et la suppression par bloc d'autres lignes. Dans le cas de mises à jour en cascade, vous pouvez obtenir des détails orphelins si certaines lignes d'un ensemble détail peuvent être mises à jour, et d'autres pas.

Autoriser les suppressions en cascade

Cochez cette case pour permettre la suppression des lignes de l'ensemble de données détail correspondantes lorsque la ligne correspondante dans l'ensemble de données maître est supprimée. Si elle est cochée (ou a la valeur true), les suppressions s'appliquent également aux détails correspondant. Si cette option n'est pas cochée (ou si sa valeur est false), les lignes maître ayant des détails ne peuvent pas être supprimées.

Cette propriété doit être utilisée avec précaution, spécialement dans les cas où vous avez plusieurs relations maître-détail chaînées, par exemple, lorsqu'un ensemble de données détail est un maître pour un autre ensemble de données détail (etc.). Normalement, dans ce cas, vous voulez que les suppressions soient répercutées dans la chaîne des ensembles de données associés. Pour que cela soit possible, vous devez définir les propriétés cascadeUpdates et cascadeDeletes à chaque niveau. Sinon, la mise en cascade s'arrête à l'ensemble de données dont la propriété cascade a la valeur false, ou n'est pas cochée. Les mises à jour ou suppressions partielles (enregistrements orphelins) peuvent aussi se produire dans les cas où un ensemble de données de la chaîne maître-détail n'est pas modifiable. La logique de programme peut aussi entraîner que l'effet de cette propriété ne soit valable que pour des mises à jour partielles. Par exemple, un gestionnaire d'événement de suppression de editListener peut autoriser la suppression de certaines lignes détail et la suppression par bloc d'autres lignes.

Tester le lien

Cliquez pour garantir que le lien entre le DataSet détail et le DataSet maître est valide par rapport aux propriétés spécifiées dans cette boîte de dialogue. Si le lien est valide, le message situé dans la zone immédiatement en dessous du bouton indique "Succès". Si le lien n'est pas valide, le message situé dans la zone immédiatement en dessous du bouton indique "Echec". Si des erreurs se sont produites, un dialogue d'erreur contenant des informations détaillées s'affiche.