Notifications de changements de données (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

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.
Remarque: Cette section suppose que vous avez lu et compris la rubrique Premières étapes dans l'utilisation de FireDAC, qui fournit des instructions sur la façon de développer une application VCL simple pour se connecter à des bases de données exemple.
  • 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 :
Remarque: Activez TFDEventAlerter avant d'exécuter le TFDQuery suivi. En effet, l'instruction doit être recensée avec l'API de notification de requête avant son exécution. C'est une condition requise par SQL Server et Oracle.

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 :

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.

Delphi :
procedure TForm1.FDEventAlerter1Alert(ASender: TFDCustomEventAlerter;
  const AEventName: string; const AArgument: Variant);
begin
ShowMessage('Detected changes to the demo dataset.');
end;
C++Builder :
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 liste SELECT de la table de base. Par exemple : SELECT t.ROWID, t.* FROM table t.
Remarque: L'identifiant 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.

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.

Voir aussi