Notifications de changements de données (FireDAC)
Sommaire
Remonter à Utilisation des commandes (FireDAC)
La fonctionnalité Notifications de changements de données peut être utilisée pour informer les clients de bases de données des changements de données dans certaines bases de données. Cette fonction fait le suivi des modifications de données dans une base de données (comme les opérations INSERT
, UPDATE
ou DELETE
) et en informe le client de la base de données.
FireDAC prend en charge la fonctionnalité Notifications de changements pour différentes base de données (voir Prise en charge des notifications de changements). Toutefois, FireDAC utilise différentes méthodes pour implémenter cette fonctionnalité en fonction du type de base de données. Cette rubrique présente des informations générales concernant la fonctionnalité Notifications de changements de données de FireDAC, puis indique les éléments à prendre en compte concernant des implémentations de SGBD spécifiques.
Pour plus d'informations sur les mécanismes d'alerte des bases de données, voir Alertes des bases de données.
Configurer une fonctionnalité Notifications de changements de données FireDAC
Pour configurer la fonctionnalité Notifications de changements de données sur une application FireDAC, vous devez inclure et configurer les composants principaux suivants :
- Un objet TFDConnection - Il s'agit de l'objet connexion FireDAC utilisé pour établir la connexion à un SGBD.
- Un objet TFDQuery - Il s'agit de l'objet FireDAC utilisé pour implémenter des ensembles de données capables d'exécuter des requêtes SQL. Vous devez configurer les propriétés de base suivantes de la requête SQL suivie :
- La propriété Connection doit être définie pour spécifier l'objet connexion FireDAC.
- La propriété SQL doit être définie avec l'instruction SQL souhaitée.
- La propriété ChangeAlerter doit être définie pour spécifier l'objet alerte FireDAC associé à votre ensemble de données.
- La propriété ChangeAlertName peut être définie pour spécifier le nom de la table de base dont les changements sont suivis.
- Un objet TFDEventAlerter - Il s'agit des objets utilisés pour gérer les notifications de changements de bases de données. Vous devez configurer les propriétés de base suivantes de l'alerte d'événement :
- La propriété Options peut être utilisée pour spécifier un ensemble de propriétés de contrôle du comportement de l'alerte d'événement.
- La propriété SubscriptionName doit être définie pour spécifier le nom d'abonnement de la notification de changement. Cela dépend du type de base de données que vous utilisez :
Réponses aux notifications de changement
Dès qu'il reçoit une notification de changement de données, FireDAC récupère automatiquement les changements et met à jour l'ensemble de données. Ce processus est contrôlé par les propriétés suivantes du composant TFDEventAlerter :
- FireDAC.Comp.Client.TFDCustomEventAlerter.Options.AutoRefresh
- FireDAC.Comp.Client.TFDCustomEventAlerter.Options.Timeout
- FireDAC.Comp.Client.TFDCustomEventAlerter.Options.MergeData
Les projets de démonstration listés sur Notifications de changements de données pour les SGBD spécifiques montrent comment utiliser le scénario mentionné ci-dessus.
Par ailleurs, vous pouvez utiliser le gestionnaire d'événement TFDCustomEventAlerter.OnAlert, qui est déclenché après la détection des changements effectués dans l'ensemble de données suivi. Ce gestionnaire d'événement vous permet d'implémenter votre scénario personnalisé afin de répondre à une notification de changement de données. Le code suivant implémente un gestionnaire d'événement OnAlert qui affiche un message lorsque des données de la base de données sont modifiées.
procedure TForm1.FDEventAlerter1Alert(ASender: TFDCustomEventAlerter;
const AEventName: string; const AArgument: Variant);
begin
ShowMessage('Detected changes to the demo dataset.');
end;
void __fastcall TForm1::FDEventAlerter1Alert(TFDCustomEventAlerter *ASender, const UnicodeString AEventName,
const Variant &AArgument)
{
ShowMessage("Detected changes to the demo dataset. ");
}
Prise en charge des notifications de changements
Le tableau suivant récapitule les informations sur les mécanismes de notifications de changements utilisés pour chaque SGBD.
SGBD | Type de notification de changement | Type Delta | TFDEventAlerter.SubscriptionName |
---|---|---|---|
InterBase | Alerte d'événement (notification manuelle) | Change Views (delta automatique) | Nom d'abonnement InterBase Change View |
MS SQL Server | Notification des mises à jour de requête (notification automatique) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
Oracle | DBMS_ALERT / DBMS_PIPE (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
Continuous Query Notification (CQN) | Delta automatique | Toute valeur | |
Advantage Database | Alerte d'événement (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
Sybase SQL Anywhere | Messages (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
Serveur DataSnap | Rappels (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
DB2 | DBMS_ALERT / DBMS_PIPE (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
Firebird | Alerte d'événement (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
Informix | DBMS_ALERT (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
PostgreSQL | Notification d'événement (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
SQLite | Alerte d'événement (notification manuelle) | Aucun (actualisation complète de l'ensemble de données) | Texte du message de notification |
Notifications de changements de données pour des SGBD spécifiques
Cette section indique les éléments spécifiques à prendre en compte pour implémenter une fonctionnalité Notifications de changements de données pour différentes bases de données.
InterBase Change Views
La fonctionnalité Change Views est la méthode Interbase d'implémentation de la Notification de changements de données. Pour plus d'informations, voir Change Views (EN).
Avant de développer une application InterBase qui utilise la fonctionnalité Change Views, vous devez créer un abonnement à Change Views. Le fragment de code suivant fournit un exemple de création de l'abonnement :
/* Create the xxx subscription to track changes to the 'yyy' table */
CREATE SUBSCRIPTION xxx ON yyy FOR ROW (INSERT, UPDATE, DELETE);
Pour plus d'informations sur la configuration de la fonctionnalité Change Views, consultez le projet de démonstration dans :
- Démarrer | Programmes | Embarcadero RAD Studio Alexandria | Exemples, puis naviguez jusqu'à Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic
Oracle CQN
La fonctionnalité Continuous Query Notification (CQN) est l'implémentation Oracle de la fonctionnalité Notifications de changements de données. Pour de plus amples informations, voir Continuous Query Notification (EN).
Pour configurer la fonctionnalité Oracle CQN, vous devez prendre en compte les considérations suivantes :
- Le client Oracle doit avoir le privilège notification de changement. Le fragment de code suivant montre comment donner à l'utilisateur ce privilège :
/* Give change notification privilege to the xxx Oracle user */ GRANT DBMS_CHANGE_NOTIFICATION TO xxx;
- La propriété SQL doit inclure les colonnes
ROWID
dans la listeSELECT
de la table de base. Par exemple :SELECT t.ROWID, t.* FROM table t
.
ROWID
est un champ d'identification unique (FireDAC) pour une ligne dans une base de données. Il est créé au moment où la ligne est insérée dans la table, et est détruit lorsqu'elle est supprimée. Les valeurs ROWID ont plusieurs utilisations importantes. Par exemple, elles fournissent le moyen le plus rapide d'accéder à une ligne unique.- Les propriétés suivantes de l'objet TFDEventAlerter doivent être configurées comme suit :
- Définissez la propriété Options.Kind sur
QueryNotifies
. - Définissez la propriété SubscriptionName sur n'importe quelle valeur. Cette propriété ne peut pas être vide. Sinon, la requête sera actualisée entièrement plutôt que de façon incrémentielle.
- Définissez la propriété Options.Kind sur
Pour plus d'informations sur la configuration de la fonctionnalité Oracle CQN, voir l'exemple FireDAC Oracle CQN.
Problèmes Oracle connus
Certaines versions du logiciel client 11.2 ne peuvent pas recevoir de notifications de changements, de notifications de rappels OCI ou de notifications Advanced Queuing (AQ) de certaines versions de bases de données 11.2. Il s'agit d'un problème Oracle connu. Vous trouverez plus d'informations dans la page (EN) Oracle suivante.
Microsoft SQL
Pour plus d'informations sur la configuration de la fonctionnalité Notifications de changements de données pour une base de données MSSQL, consultez le projet de démonstration dans :
- Démarrer | Programmes | Embarcadero RAD Studio Alexandria | Exemples, puis naviguez jusqu'à Object Pascal\Database\FireDAC\Samples\DBMS Specific\MSSQL\QueryNotify.