Benachrichtigungen über Datenänderungen (FireDAC)

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Arbeiten mit Anweisungen (FireDAC)


In diesem Thema werden die grundlegenden Schritte für die Verwendung von Benachrichtigungen über Datenänderungen für bestimmte Datenbanken beschrieben.


Allgemeine Informationen

Die Funktion "Benachrichtigungen über Datenänderungen" verfolgt Änderungen in einer Datenbank (wie Einfüge-, Aktualisierungs- und Löschvorgänge) und benachrichtigt den Datenbank-Client über diese Änderungen.

Die Methode der Änderungsbenachrichtigung ist von der jeweiligen Datenbank abhängig. In diesem Thema wird diese Funktion für InterBase beschrieben. Informationen über andere Datenbanken finden Sie unter Datenbankwarnungen.

InterBase Change Views

Die Funktion Change Views™ verwendet die generationenübergreifende Architektur von InterBase zum Nachverfolgen von Datenänderungen. Mithilfe dieser Funktion können Sie die Frage "Was hat sich seit der letzten Anzeige der Daten geändert?" schnell beantworten.

Früher waren dazu Trigger, Protokollierung und/oder Transaktionen nötig. Dies war zeitaufwendig für Entwickler und wirkte sich auf die Datenbankleistung für eine bestimmte Transaktionsauslastung oder ein Änderungsvolumen aus. Mit Change Views gibt es keinen Leistungsüberhang bei vorhandenen Transaktionen, weil eine konsistente Ansicht der geänderten Daten, die sichtbar für andere Transaktionen ist, unterhalten wird.

Weitere Informationen finden Sie unter Change Views (EN).

Verwenden der Funktion Change Views

Bei InterBase XE7 kann das Benachrichtigungssystem mit der Komponente TFDEventAlerter (Datenbank-Ereigniswarnungen) implementiert werden.

In diesem Abschnitt werden die grundlegenden Schritte zum Erstellen einer Demo-VCL-Anwendung ( Object Pascal und Appmethod C++) beschrieben, die Änderungen an InterBase-Tabellen nachverfolgt. Folgende Bereiche werden behandelt:

  • Erstellen einer Demo-InterBase-Datenbank und Abonnieren von Change Views
  • Herstellen einer Verbindung zu einer InterBase-Datenbank
  • Anzeigen und Bearbeiten der Datensätze aus der Datenbank
  • Abonnieren der Benachrichtigungen über Datenänderungen
  • Behandeln der Datenänderungsereignisse

Einrichten der Change Views-Datenbank

Bevor Sie mit der Entwicklung der Demoanwendung beginnen, sollten Sie eine Demodatenbank und ein Abonnement für Change Views einrichten.

Das Installationsprogramm von Appmethod umfasst das Skript create.sql, das Sie bei der Durchführung der oben erwähnten Schritte unterstützt. Sehen Sie sich die folgenden Codefragmente dieses Skripts an, die die InterBase-Demodatenbank und ein Abonnement für Change Views erstellen:


/* 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');

Speicherort des create.sql-Skripts: C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic\connect.sql

So führen Sie das Skript "create.sql" aus:

  1. Wechseln Sie zum Ordner C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic.
  2. Geben Sie an der Eingabeaufforderung folgenden Befehl ein:
isql.exe -i create.sql


Hinweis: Standardmäßig installiert das Installationsprogramm von Appmethod isql.exe im Verzeichnis C:\Programme (x86)\Embarcadero\Studio\16.0\InterBaseXE7\bin\ .

Dieses Skript erstellt die InterBase-Datenbank "C:\sub.ib", das Abonnement "sub" zum Anzeigen der Änderungen und Trigger, die nach Änderungen der Tabelle "tab" dieser Datenbank ausgelöst werden.

Einrichten der Change View-Demoanwendung

Sie können jetzt eine Demoanwendung erstellen und konfigurieren, die Änderungen der C:\sub.ib-Datenbank nachverfolgt. Das Anwendungsformular sieht etwa folgendermaßen aus:

IB Connect VCL form.png

Hinweis: In diesem Abschnitt wird davon ausgegangen, dass Sie Erste Schritte bei der Verwendung von FireDAC gelesen und verstanden haben. Dieses Thema enthält Anweisungen für die Entwicklung einer einfachen VCL-Anwendung zum Herstellen einer Verbindung mit Demodatenbanken. Befolgen Sie diese Anweisungen, um eine der obigen Abbildung entsprechende Benutzeroberfläche zu entwickeln.

Führen Sie die folgenden Schritte aus, um die Einstellungen der FireDAC-Komponenten zu konfigurieren:

  1. Klicken Sie im Formular-Designer mit der rechten Maustaste auf FDConnection1, wählen Sie im Kontextmenü Verbindungseditor aus, und führen Sie im FireDAC-Verbindungseditor Folgendes aus:
    • Wählen Sie auf der Registerkarte Definition aus der Liste Driver ID den Eintrag IB aus.
    • Geben Sie die folgenden Verbindungsparameter an, und klicken Sie dann auf OK:
      • Database = C:\SUB.IB
      • User_Name = sysdba
      • Password = masterkey
      • Protocol = TCPIP
      • Server = 127.0.0.1
  2. Wählen Sie FDQuery1 aus, und geben Sie im Objektinspektor die folgenden Eigenschaften an:
    • ChangeAlerter = FDEventAlerte1
    • Connection = FDConnection1
    • ChangeAlertName =tab – ist immer der Name der Tabellen, in der die Änderungen nachverfolgt werden.
    • SQL = select * from tab
  3. Wählen Sie DataSource1 aus, und setzen Sie die Eigenschaft DataSet auf FDQuery1.
  4. Wählen Sie FDEventAlerter1 aus, und setzen Sie die Eigenschaft SubscriptionName auf sub.
  5. Wählen Sie DBGrid1 aus, und setzen Sie die Eigenschaft DataSource auf DataSource1.

Jetzt müssen Sie die Ereignisbehandlungsroutine OnClick für die Schaltfläche Open DB konfigurieren, mit der die Demodatenmenge geöffnet und die Nachverfolgung von Änderungen der Datenbanktabellen aktiviert wird.

So implementieren Sie die OnClick-Ereignisbehandlungsroutine für die Schaltfläche Open DB':

  1. Doppelklicken Sie im Formular-Designer auf die Schaltfläche Open DB.
  2. Geben Sie im Quelltext-Editor den folgenden Code ein:
    Object Pascal:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
          FDQuery1.Active := True;
          FDQuery1.ChangeAlerter.Active :=True;
    end;
    
    Appmethod C++:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    FDQuery1->Active = true;
    FDQuery1->ChangeAlerter->Active = true;
    }
    

Antworten auf Änderungsbenachrichtigungen

Beim Empfang einer Benachrichtigung über Datenänderungen ruft FireDAC die Änderungen automatisch ab und aktualisiert die Datenmenge. Dieser Prozess wird von den folgenden Eigenschaften der Komponente TFDEventAlerter gesteuert:

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

Das Demoprojekt IBChangeView zeigt, wie dieses Szenario verwendet wird. Navigieren Sie zu Start | Programme | Embarcadero Appmethod 1.17 | Beispiele Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic, um dieses Projekt zu öffnen.

In diesem Szenario wird die Ereignisbehandlungsroutine TFDCustomEventAlerter.OnAlert verwendet, die ausgelöst wird, nachdem Änderungen an der Demodatenmenge vorgenommen wurden. In diese Ereignisbehandlungsroutine können Sie Ihr benutzerdefiniertes Szenario für die Antwort auf eine Benachrichtigung über Datenänderungen implementieren.


So implementieren Sie die Ereignisbehandlungsroutine OnAlert:

  1. Wählen Sie im Formular-Designer die Komponente FDEventAlerter1 aus.
  2. Öffnen Sie im Objektinspektor die Registerkarte Ereignisse, und doppelklicken Sie neben OnAlert.
  3. Geben Sie im Quelltext-Editor den folgenden Code ein:
    Object Pascal:
    procedure TForm1.FDEventAlerter1Alert(ASender: TFDCustomEventAlerter;
      const AEventName: string; const AArgument: Variant);
    begin
    ShowMessage('Detected changes to the demo dataset.');
    end;
    
    Appmethod C++:
    void __fastcall TForm1::FDEventAlerter1Alert(TFDCustomEventAlerter *ASender, const UnicodeString AEventName,
              const Variant &AArgument)
    {
      ShowMessage("Detected changes to the demo dataset. ");
    }
    

Ausführen der Beispielanwendung

Gehen Sie folgendermaßen vor, um diese Anwendung auszuführen:

  1. Wählen Sie in der Projektverwaltung die Zielplattform aus (Win32 und Win64 werden unterstützt).
  2. Drücken Sie Umschalt+Strg+F9, um die Anwendung ohne Debugger auszuführen.

Mit dem folgenden Szenario können Sie Ihre Anwendung testen:

  1. Klicken Sie auf die Schaltfläche Open DB.
  2. Nehmen Sie beliebige Änderungen in einer Zeile der Spalte Name vor.
  3. Um die Änderungen zu übergeben, klicken Sie auf eine andere Zeile.

Nachdem die Anwendung Änderungen festgestellt hat, wird folgendes Meldungsfenster angezeigt:

InterBase test.png

Unterstützung für Änderungsbenachrichtigungen

Die folgende Tabelle enthält eine Zusammenfassung der für das jeweilige DBMS verwendeten Änderungsbenachrichtigung.

DBMS Typ der Änderungsbenachrichtigung Delta-Typ TFDEventAlerter.SubscriptionName
InterBase Event Alerter (manuelle Benachrichtigung) Change Views (automatisches Delta) Abonnementname von InterBase Change View
MS SQL Server Query Update Notification (automatische Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
Oracle DBMS_ALERT / DBMS_PIPE (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
Advantage Database Event Alerter (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
Sybase SQL Anywhere Meldungen (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
DataSnap-Server Callbacks (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
DB2 DBMS_ALERT / DBMS_PIPE (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
Firebird Event Alerter (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
Informix DBMS_ALERT (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
PostgreSQL Ereignisbenachrichtigung (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext
SQLite Event Alerter (manuelle Benachrichtigung) Keiner (vollständige Datenmengenaktualisierung) Benachrichtigungsmeldungstext

Demoprojekte

Weitere Informationen finden Sie in den folgenden Demoprojekten:

  • Start | Programme | Embarcadero Appmethod 1.17 | Beispiele und zu Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic navigieren.
  • Start | Programme | Embarcadero Appmethod 1.17 | Beispiele und zu Object Pascal\Database\FireDAC\Samples\DBMS Specific\MSSQL\QueryNotify navigieren.

Siehe auch