Notifications de changements de données (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation des commandes (FireDAC)


Cette rubrique décrit les étapes élémentaires relatives à l'utilisation des notifications de changements de données pour certaines bases de données.


Informations générales

La fonctionnalité Notifications de changements de données fait le suivi des modifications de données dans une base de données (opérations d'insertion, de mise à jour et de suppression) et en informe le client de la base de données.

La méthode de notification des changements dépend du SGBD. Cette rubrique décrit la fonctionnalité pour InterBase. Pour plus d'informations sur les autres bases de données, voir Alertes des bases de données.

InterBase Change Views

La fonctionnalité Change Views™ utilise l'architecture multigénérationelle d'InterBase pour faire le suivi des changements de données. Cette fonctionnalité vous permet de répondre rapidement à la question : "Quelles données ont changé depuis ma dernière consultation ?".

Auparavant, cela nécessitait des déclencheurs, une journalisation et/ou un nettoyage du journal WAL (Write Ahead Log) de transactions. Cela prenait du temps au développeur et affectait les performances de la base de données lorsque les charges de transactions ou les volumes de changements étaient importants. Désormais, avec Change Views, il n'existe plus de surcharge des performances sur les transactions existantes car Change Views fournit en permanence une vue cohérente des données modifiées, observable par les autres transactions.

Pour plus d'informations, voir Change Views (EN)

Utilisation de la fonctionnalité Change Views

Pour InterBase XE7, le système de notification peut être implémenté à l'aide du composant TFDEventAlerter (alertes d'événements de base de données).

Cette section fournit les étapes de base afin de créer une application VCL exemple ( Delphi et C++Builder) qui suit les changements apportés aux tables InterBase. Elle développe les sujets suivants :

  • Création d'une base de données InterBase de démonstration et abonnement à Change Views
  • Connexion à une base de données InterBase
  • Affichage et édition des enregistrements de la base de données
  • Abonnement aux notifications de changement de données
  • Gestion des événements de changement de données

Configuration de la base de données Change Views

Avant de développer une application exemple, vous devez créer une base de données exemple et un abonnement à Change Views.

La configuration de RAD Studio fournit le script create.sql qui aide à effectuer les opérations mentionnées ci-dessus. Pour plus de clarté, considérez les extraits de code suivants de ce script qui crée la base de données exemple InterBase et un abonnement à Change Views :


/* Create a demo database */
CREATE DATABASE 'C:\SUB.IB'
USER 'SYSDBA' PASSWORD 'masterkey'
DEFAULT CHARACTER SET UTF8;


/* Create a trigger that fires after updating the 'tab' table */
CREATE TRIGGER tr_tab_after_upd FOR tab
ACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  POST_EVENT 'TAB';
END


/* Create a subscription to track changes to the 'tab' table */
CREATE SUBSCRIPTION sub ON tab FOR ROW (INSERT, UPDATE, DELETE);

/* Insert data to the 'tab' table */
INSERT INTO tab (name) VALUES ('Alex Simpson');
INSERT INTO tab (name) VALUES ('Nicole Burns');
INSERT INTO tab (name) VALUES ('Peter Pauls');

Emplacement du script create.sql : C:\Utilisateurs\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic\connect.sql

Pour exécuter le script create.sql

  1. Accédez au dossier C:\Utilisateurs\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic.
  2. A l'invite de commandes, tapez la syntaxe suivante :
isql.exe -i create.sql


Remarque Par défaut, le programme d'installation de RAD Studio installe le fichier isql.exe dans C:\Program Files (x86)\Embarcadero\Studio\16.0\InterBaseXE7\bin\

Ce script crée la base de données InterBase C:\sub.ib, l'abonnement "sub" à View Changes, puis déclenche cet événement une fois que des changements ont été apportés à la table "tab" de cette base de données.

Configuration de l'application exemple Change View

Vous pouvez à présent créer et configurer une application de démonstration qui fait le suivi des changements apportés à la base de données C:\sub.ib. La fiche de l'application est similaire à l'écran suivant :

IB Connect VCL form.png

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. Suivez ces instructions pour développer une interface utilisateur similaire à l'écran ci-dessus.

Pour configurer les paramètres des composants FireDAC, effectuez les étapes suivantes :

  1. Dans le Concepteur de fiches, cliquez avec le bouton droit sur FDConnection1, sélectionnez Editeur de connexion dans le menu de raccourcis, puis dans l'éditeur de connexion FireDAC, effectuez les étapes suivantes :
    • Allez sur l'onglet Définition, puis, dans la liste ID du pilote, sélectionnez IB.
    • Sélectionnez les paramètres de connexion suivants, puis cliquez sur OK :
      • Database = C:\SUB.IB
      • User_Name = sysdba
      • Password = masterkey
      • Protocol = TCPIP
      • Server = 127.0.0.1
  2. Sélectionnez FDQuery1, puis spécifiez les propriétés suivantes dans l'inspecteur d'objets :
    • ChangeAlerter = FDEventAlerte1
    • Connection = FDConnection1
    • ChangeAlertName =tab - Il s'agit toujours du nom de la table dont les changements sont suivis.
    • SQL = select * from tab
  3. Sélectionnez DataSource1, puis définissez sa propriété DataSet sur FDQuery1
  4. Sélectionnez FDEventAlerter1, puis définissez sa propriété SubscriptionName sur sub.
  5. Sélectionnez DBGrid1, puis définissez sa propriété DataSource sur DataSource1.

Vous devez à présent configurer le gestionnaire d'événement OnClick pour le bouton Open DB qui ouvre l'ensemble de données exemple et active le suivi des changements sur les tables de base de données.

'Pour implémenter le gestionnaire d'événement OnClick pour le bouton Open DB'

  1. Dans le Concepteur de fiches, double-cliquez sur le bouton Open DB.
  2. Dans l'éditeur de code, spécifiez le code suivant :
    Delphi :
    procedure TForm1.Button1Click(Sender: TObject);
    begin
          FDQuery1.Active := True;
          FDQuery1.ChangeAlerter.Active :=True;
    end;
    
    C++Builder :
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    FDQuery1->Active = true;
    FDQuery1->ChangeAlerter->Active = true;
    }
    

Réponse 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 :

  • TFDEventAlerter.Options.AutoRefresh
  • TFDEventAlerter.Options.Timeout
  • TFDEventAlerter.Options.MergeData

Le projet de démonstration IBChangeView illustre la manière d'utiliser le scénario mentionné précédemment. Pour accéder à ce projet, ouvrez Démarrer | Programmes | Embarcadero RAD Studio 10 Seattle | Exemples puis naviguez jusqu'à Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic

Dans notre scénario, nous utilisons le gestionnaire d'événement TFDCustomEventAlerter.OnAlert qui se déclenche après la détection de changements dans l'ensemble de données exemple. Dans ce gestionnaire d'événement, vous pouvez implémenter votre scénario personnalisé afin de répondre à une notification de changement de données.


'Pour implémenter le gestionnaire d'événement OnAlert'

  1. Sur le Concepteur de fiches, sélectionnez FDEventAlerter1.
  2. Dans l'inspecteur d'objets, ouvrez l'onglet Evénements, puis double-cliquez en regard de OnAlert.
  3. Dans l'éditeur de code, spécifiez le code suivant :
    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. ");
    }
    

Exécution de l'application exemple

Pour exécuter cette application, procédez comme suit :

  1. Dans le Gestionnaire de projets, sélectionnez la plate-forme cible (plates-formes prises en charge : Win32 ou Win64).
  2. Appuyez sur Maj+Ctrl+F9 pour exécuter l'application sans débogage.

Pour tester votre application, vous pouvez utiliser le scénario suivant :

  1. Cliquez sur le bouton Open DB.
  2. Apportez des modifications dans n'importe quelle ligne de la colonne Nom.
  3. Pour valider vos modifications, cliquez sur une autre ligne.

Après avoir détecté vos modifications, l'application affiche la zone de message d'information :

InterBase test.png

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
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

Projets exemple

Pour de plus amples informations, voir les projets exemple suivants :

  • Démarrer | Programmes | Embarcadero RAD Studio 10 Seattle | Exemples, puis naviguez jusqu'à Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic
  • Démarrer | Programmes | Embarcadero RAD Studio 10 Seattle | Exemples, puis naviguez jusqu'à Object Pascal\Database\FireDAC\Samples\DBMS Specific\MSSQL\QueryNotify.

Voir aussi