Notifications de changements de données (FireDAC)
Sommaire
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
- Accédez au dossier
C:\Utilisateurs\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic
. - 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
dansC:\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 :
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 :
- 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
- Database =
- 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
- ChangeAlerter =
- Sélectionnez DataSource1, puis définissez sa propriété DataSet sur
FDQuery1
- Sélectionnez FDEventAlerter1, puis définissez sa propriété SubscriptionName sur
sub
. - 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'
- Dans le Concepteur de fiches, double-cliquez sur le bouton Open DB.
-
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'
- Sur le Concepteur de fiches, sélectionnez FDEventAlerter1.
- Dans l'inspecteur d'objets, ouvrez l'onglet Evénements, puis double-cliquez en regard de OnAlert.
- 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 :
- Dans le Gestionnaire de projets, sélectionnez la plate-forme cible (plates-formes prises en charge : Win32 ou Win64).
- Appuyez sur
Maj+Ctrl+F9
pour exécuter l'application sans débogage.
Pour tester votre application, vous pouvez utiliser le scénario suivant :
- Cliquez sur le bouton Open DB.
- Apportez des modifications dans n'importe quelle ligne de la colonne Nom.
- 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 :
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.