Application des mises à jour à des ensembles de données représentant plusieurs tables
Remonter à Comment répondre aux demandes de mise à jour des clients
Quand un fournisseur d'ensemble de données génère des instructions SQL qui appliquent directement les mises à jour dans un serveur de bases de données, il lui faut le nom de la table de la base de données qui contient les enregistrements. Cela peut être automatiquement géré pour de nombreux ensembles de données tels que les ensembles de données de type table ou les composants TQuery "dynamiques". Toutefois, les mises à jour automatiques représentent un problème dans le cas où le fournisseur doit appliquer les mises à jour aux données sous-jacentes à une procédure stockée renvoyant un ensemble de résultats ou à une requête multitable. Il n'est pas évident de déterminer le nom de la table dans laquelle appliquer les mises à jour.
Si la requête ou procédure stockée est un ensemble de données BDE (TQuery ou TStoredProc) et qu'elle possède un objet mise à jour associé, le fournisseur utilise cet objet. Toutefois, en l'absence d'objet mise à jour, vous devez spécifier le nom de la table par code dans un gestionnaire d'événement Provider.OnGetTableName. Quand ce gestionnaire d'événement a indiqué un nom de table, le fournisseur peut générer les instructions SQL appropriées pour appliquer les mises à jour.
La solution consistant à fournir le nom de la table ne fonctionne que si les mises à jour doivent être appliquées à une seule table de base de données (s'il suffit de modifier les enregistrements d'une seule table). Si la mise à jour nécessite la modification de plusieurs tables de la base de données, vous devez explicitement appliquer les mises à jour en utilisant l'événement Provider.BeforeUpdateRecord du fournisseur. Quand ce gestionnaire d'événement a appliqué une mise à jour, vous devez initialiser son paramètre Applied à True afin que le fournisseur ne génère pas une erreur.
Remarque : Si le fournisseur est associé à un ensemble de données BDE, vous pouvez utiliser un objet mise à jour dans le gestionnaire d'événement BeforeUpdateRecord pour appliquer les mises à jour à l'aide d'instructions SQL personnalisées.