Benachrichtigungen über Datenänderungen (FireDAC)
Inhaltsverzeichnis
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.
- 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.
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:
- FireDAC.Comp.Client.TFDCustomEventAlerter.Options.AutoRefresh
- FireDAC.Comp.Client.TFDCustomEventAlerter.Options.Timeout
- FireDAC.Comp.Client.TFDCustomEventAlerter.Options.MergeData
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.
procedure TForm1.FDEventAlerter1Alert(ASender: TFDCustomEventAlerter;
const AEventName: string; const AArgument: Variant);
begin
ShowMessage('Detected changes to the demo dataset.');
end;
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 Rio | 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 derSELECT
Liste für die Basistabelle hinzufügen. Zum Beispiel:SELECT t.ROWID, t.* FROM table t
.
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.
- Setzen Sie die Options.Kind-Eigenschaft auf
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 Rio | Beispiele und navigieren Sie zu Object Pascal\Database\FireDAC\Samples\DBMS Specific\MSSQL\QueryNotify