Benachrichtigungen über Datenänderungen (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Arbeiten mit Anweisungen (FireDAC)


Mit der Funktion "Benachrichtigungen über Datenänderungen" können Sie Datenbank-Clients über Datenänderungen für einige Datenbanken benachrichtigen. Diese Funktion findet Änderungen in Daten in einer Datenbank (wie INSERT-, UPDATE- oder DELETE-Operationen) und benachrichtigt den Datenbank-Client über diese Änderungen.

FireDAC unterstützt die Funktion "Benachrichtigungen über Änderungen" für verschiedene Datenbanken (siehe Unterstützung für Änderungsbenachrichtigungen). FireDAC verwendet verschiedene Methoden, um diese Funktion, abhängig von der Art der Datenbank, zu implementieren. Dieses Thema beschreibt die allgemeinen Informationen der Funktion "Benachrichtigungen über FireDAC-Datenänderungen" und gibt dann einige Gesichtspunkte für spezifische DBMS-Implementierungen.

Weitere Informationen über Mechanismen für Datenbankwarnungen finden Sie unter Datenbankwarnungen.

Einrichten der Funktion "Benachrichtigung über FireDAC-Datenänderungen"

Um die Funktion "Benachrichtigung über FireDAC-Datenänderungen" auf einer FireDAC-Anwendung einzurichten, sollten Sie die folgenden Hauptkomponenten hinzufügen und konfigurieren:

  • Ein TFDConnection-Objekt - Dies ist das FireDAC-Verbindungsobjekt, mit dem eine Verbindung zu einem DBMS hergestellt wird.
    Hinweis: In diesem Abschnitt wird davon ausgegangen, dass Sie das Tutorial Erste Schritte bei der Verwendung von FireDAC, das Anleitungen zum Entwickeln einer einfachen VCL-Anwendung zur Verbindung mit Demo-Datenbanken bereitstellt, gelesen und verstanden haben.
  • Ein TFDQuery-Objekt - Dies ist das FireDAC-Objekt, mit dem Datenmengen, die SQL-Abfragen ausführen können, implementiert werden. Sie sollten die folgenden Grundeigenschaften der SQL-Abfrage, die festgestellt wird, implementieren:
    • Die Connection-Eigenschaft muss gesetzt werden, damit das FireDAC-Verbindungsobjekt angegeben wird.
    • Die SQL-Eigenschaft muss mit der gewünschten SQL-Anweisung gesetzt werden.
    • Die ChangeAlerter-Eigenschaft muss gesetzt werden, damit das FireDAC-Warnobjekt, das mit Ihrer Datenmenge assoziiert ist, angegeben wird.
    • Die ChangeAlertName-Eigenschaft kann gesetzt werden, damit der Name der Basistabelle, deren Änderungen festgestellt wurden, angegeben wird.
  • Ein TFDEventAlerter-Objekt - Dies ist das Objekt, mit dem die Benachrichtigungen über Datenbankänderungen behandelt werden. Sie sollten die folgenden Grundeigenschaften der Ereigniswarnung konfigurieren:
    • Mit der Options-Eigenschaft kann eine Menge von Eigenschaften festgelegt werden, um das Verhalten der Ereigniswarnung zu kontrollieren.
    • Die SubscriptionName-Eigenschaft muss gesetzt werden, damit der Substriptionsname der Änderungsbenachrichtigung angegeben wird. Es hängt vom Typ der Datenbank, die Sie verwenden, ab.
      Hinweis: Aktivieren Sie TFDEventAlerter vor der Ausführung der gefundenen TFDQuery. Dies ist nötig, da die Anweisung mit der Abfragebenachrichtigungs-API vor der Ausführung registriert werden muss. Dies ist eine Anforderung vom SQL-Server und Oracle.

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:

Jedes der Demo-Projekte, die in Benachrichtigungen über Datenänderungen für Spezifisches DBMS aufgelistet sind, zeigt, wie das oben genannte Szenario verwendet wird.

Außerdem können Sie die TFDCustomEventAlerter.OnAlert-Ereignisbehandlungsroutine verwenden, die nach dem Ermitteln jeder Änderung der gefundenen Datenmenge ausgelöst wird. Mit dieser Ereignisbehandlungsroutine können Sie Ihr benutzerdefiniertes Szenario implementieren, um auf Benachrichtigungen über Datenänderungen zu antworten. Der folgende Code implementiert eine OnAlert-Ereignisbehandlungsroutine, die eine Benachrichtigung anzeigt, wenn jede Daten in einer Datenbank geändert werden.

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. ");
}

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
Continuous Query Notification (CQN) Automatisches Delta Jeder Wert
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

Benachrichtigungen über Datenänderungen für Spezifisches DBMS

Dieser Abschnitt gibt einige Gesichtpunkte zur Implementierung der Funktion "Benachrichtigung über Datenänderungen" für verschiedene Datenbanken.

InterBase Change Views

Die Funktion Change Views ist die Interbase-Methode zur Implementierung von Benachrichtigungen über Datenbankänderungen. Weitere Informationen finden Sie unter Change Views (EN).

Vor der Entwicklung einer InterBase-Anwendung, die die Funktion Change Views verwendet, sollten Sie eine Subskription von Change Views erstellen. Der folgende Quelltextabschnitt ist ein Beispiel für die Erstellung der Subskription:

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

Weitere Informationen zur Konfigurierung der Funktion Change Views finden Sie in dem Demo-Projekt unter:

  • Start | Programme | Embarcadero RAD Studio Sydney | Beispiele und zu Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic navigieren.

Oracle CQN

De Funktion Continuous Query Notification (CQN) ist die Oracle-Implementierung der Funktion "Benachrichtigung über Datenänderungen". Weitere Informationen finden Sie unter Continuous Query Notification (EN).

Um die Oracle-CQN-Funktion zu konfigurieren, sollten Sie die folgenden Gesichtspunkte in Betracht ziehen:

  • Der Oracle-Client muss die Änderungsbenachrichtigung-Rechte besitzen. Der folgende Quelltextabschnitt ist ein Beispiel dafür, wie der Benutzer dieses Recht verwendet:
/* Give change notification privilege to the xxx Oracle user */
GRANT DBMS_CHANGE_NOTIFICATION TO xxx;
  • Die SQL-Eigenschaft sollte die ROWID-Spalten der SELECT Liste für die Basistabelle hinzufügen. Zum Beispiel: SELECT t.ROWID, t.* FROM table t.
    Hinweis: Der ROWID-Bezeichner ist ein Eindeutige Kennzeichnungsfeld (FireDAC) (FireDAC) für einer Zeile in einer Datenbank. Es wird in der Zeit erstellt, in der die Zeile in die Tabelle eingefügt wird, und freigegeben wird, wenn sie entfernt wird. ROWID-Werte haben verschiedenen wichtige Verwendungen; sie sind z. B. der schnellste Weg, um auf eine Reihe zuzugreifen.
  • Die folgenden Eigenschaften des TFDEventAlerter-Objekts sollten wie folgt konfiguriert werden:
    • Setzen Sie die Options.Kind-Eigenschaft auf QueryNotifies.
    • Setzen Sie die SubscriptionName-Eigenschaft auf jeden Wert. Diese Eigenschaft kann nicht leer sein. Andernfalls ist die Abfrage völlig, statt inkrementell, aktualisiert.

Weitere Informationen zur Konfiguration der Oracle-CQN-Funktion finden Sie unter dem Beispiel FireDAC Oracle CQN.

Bekannte Oracle-Probleme

Im Gegensatz zu Versionen der 11.2-Datenbank, können einige Versionen von 11.2-Client-Software keine Änderungsbenachrichtigungen, OCI-Callbacks oder Advanced Queuing (AQ)-Benachrichtigungen empfangen. Dies ist ein bekanntes Oracle-Problem. Weitere Informationen finden Sie auf der folgenden Oracle-Seite (EN).

Microsoft-SQL

Weitere Informationen zur Konfigurierung der Funktion "Benachrichtigungen über Datenänderungen" für eine MSSQL-Datenbank finden Sie in dem Demo-Projekt unter:

  • Start | Programme | Embarcadero RAD Studio Sydney | Beispiele und navigieren Sie zu Object Pascal\Database\FireDAC\Samples\DBMS Specific\MSSQL\QueryNotify

Siehe auch