Etablissement de relations maître-détail en utilisant des paramètres

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation d'ensembles de données de type requête

Pour définir une relation maître/détail où l'ensemble détail est un ensemble de données de type requête, vous devez spécifier une requête utilisant des paramètres. Ces paramètres font référence aux valeurs de champs en cours dans l'ensemble de données maître. Comme les valeurs de champs en cours dans l'ensemble de données maître changent dynamiquement lors de l'exécution, vous devez re-lier les paramètres de l'ensemble détail chaque fois que change l'enregistrement maître. Bien qu'il soit possible d'écrire pour cela du code utilisant un gestionnaire d'événement, tous les ensembles de données de type requête fournissent un mécanisme plus facile avec la propriété DataSource.

Si les valeurs des paramètres d'une requête paramétrée ne sont pas liées au moment de la conception ni spécifiées au moment de l'exécution, les ensembles de type requête tentent de fournir ces valeurs en utilisant la propriété DataSource. DataSource identifie un autre ensemble de données où sont recherchés des noms de champs correspondant aux noms des paramètres non liés. Cet ensemble de données de recherche peut être de n'importe quel type. L'ensemble de données où s'effectue la recherche doit être créé et rempli avant la création de l'ensemble de données détail qui l'utilise. S'il existe des correspondances dans l'ensemble de données où s'effectue la recherche, l'ensemble de données détail lie les valeurs des paramètres aux valeurs des champs trouvés dans l'enregistrement en cours pointé par la source de données.

Pour comprendre comment cela fonctionne, considérez deux tables : une table de clients (Customer) et une table de commandes (Orders). Pour chaque client, la table des commandes contient l'ensemble des commandes effectuées par le client. La table des clients comprend un champ ID qui spécifie un ID de client unique. La table des commandes comprend un champ CustID qui spécifie l'ID du client ayant passé une commande.

Pour configurer l'ensemble de données Customer :

  1. Ajoutez un ensemble de données de type requête à votre application et liez-le à la table Customer.
  2. Ajoutez un composant TDataSource nommé CustomerSource. Définissez sa propriété DataSet par l'ensemble de données ajouté à l'étape 1. Cette source de données représente désormais l'ensemble de données Customer.
  3. Ajoutez un ensemble de données de type requête et définissez sa propriété SQL par :
    SELECT CustID, OrderNo, SaleDate
    FROM Orders
    WHERE CustID = :ID
    Remarquez que le nom du paramètre est le même que le nom du champ dans la table maître (Customer).
  4. Définissez la propriété DataSource de l'ensemble de données détail sur CustomerSource. Définir cette propriété transforme l'ensemble de données détail en requête liée.

A l'exécution, le paramètre :ID de l'instruction SQL pour l'ensemble de données détail, n'a pas de valeur, l'ensemble de données essaie alors de trouver une correspondance entre le nom du paramètre et le nom d'une colonne de l'ensemble de données identifié par CustomersSource. CustomersSource obtient ses données de l'ensemble de données maître qui, à son tour, dérive ses données de la table Customer. Comme la table Customer contient une colonne appelée "CustID", la valeur du champ ID dans l'enregistrement en cours de l'ensemble de données maître est assignée au paramètre :ID de l'instruction SQL de l'ensemble de données détail. Les ensembles de données sont liés dans une relation maître/détail. Chaque fois que l'enregistrement en cours change dans l'ensemble de données Customer, l'instruction SELECT de l'ensemble de données détail s'exécute pour retrouver toutes les commandes s'appliquant à l'identificateur de client en cours.

Voir aussi