Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankänderungen mitteilen (https://www.delphipraxis.net/94942-datenbankaenderungen-mitteilen.html)

Nico80 28. Jun 2007 12:22

Datenbank: Interbase • Version: 7.1 • Zugriff über: InterBase Express (IBX)

Datenbankänderungen mitteilen
 
Hallo,
ich habe eine allgemeine Frage zu Datenbanken und suche nach Lösungen oder Informationsquellen.

Ich arbeite mit einer Datenbank und mehreren Anwendungen, die auf diese DB zugreifen.
Für den Zugriff auf die DB habe ich ein Geschäftsobjekt-Modell entwickelt, in der die DB-Zugriffe gekapselt werden.
Nun möchte ich einen Aktualisierungs-Mechanismus entwickeln. D.h. falls eine Anwendung eine Änderung in der DB vornimmt,
sollen alle anderen Anwendungen darüber informiert werden und sich selbst aktualisieren.
Bei Interbase und Firebird gibt es spezielle Events, die ausgelöst werden können. Gibt es noch andere Möglichkeiten?

Für Informationen oder Lösungsansätze wäre ich sehr dankbar.

Phoenix 28. Jun 2007 12:25

Re: Datenbankänderungen mitteilen
 
Hrm. Da alle Clients um miteinaner zu kommunizieren eh im gleichen Netz sind würde ein UDP-Broadcast (Tabellenname) schon ausreichen. Das ein Paket im LAN verloren geht ist recht unwahrscheinlich.

mkinzler 28. Jun 2007 12:25

Re: Datenbankänderungen mitteilen
 
Gleiche Frage, gleiche Antwort:
Ja du kannst einen Event/Alert erzeuge, auf welcher dann von den Clients regiert werden kann.

Nico80 28. Jun 2007 13:23

Re: Datenbankänderungen mitteilen
 
Zitat:

Zitat von mkinzler
Gleiche Frage, gleiche Antwort:
Ja du kannst einen Event/Alert erzeuge, auf welcher dann von den Clients regiert werden kann.

Wenn ich aber eine globale Transaktion benutze, in denen mehrere Tabellen bearbeitet werden, muss ich die Events erst erzeugen,
wenn die Transaktionen commitet werden. D.h. ich muss mir merken, was ich innerhalb einer Transaktion mache. Ist das zu kompliziert gedacht.
Kennt jemand ein Beispiel im netz? Bin ja wohl nicht der erste der sich mit dem Thema beschäftigt?!

alex517 28. Jun 2007 14:01

Re: Datenbankänderungen mitteilen
 
Zitat:

Zitat von Nico80
Wenn ich aber eine globale Transaktion benutze, in denen mehrere Tabellen bearbeitet werden, muss ich die Events erst erzeugen,
wenn die Transaktionen commitet werden. D.h. ich muss mir merken, was ich innerhalb einer Transaktion mache. Ist das zu kompliziert gedacht.
Kennt jemand ein Beispiel im netz? Bin ja wohl nicht der erste der sich mit dem Thema beschäftigt?!

POST_EVENT aktiviert man z.B. im After-INSERT|UPDATE|DELETE-Trigger der jeweiligen Tabelle.
Diese Events werden aber erst NACH einem Commit ausgelöst.
Du mußt die also darum keine Gedanken machen.

SQL-Code:
CREATE TRIGGER AUFTRAG_AIUD0 FOR AUFTRAG
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  if (INSERTING) then POST_EVENT 'AUFTRAG_INSERT';
  if (UPDATING) then POST_EVENT 'AUFTRAG_UPDATE';
  if (DELETING) then POST_EVENT 'AUFTRAG_DELETE';
end
alex

Nico80 28. Jun 2007 14:04

Re: Datenbankänderungen mitteilen
 
Zitat:

Zitat von alex517
Zitat:

Zitat von Nico80
Wenn ich aber eine globale Transaktion benutze, in denen mehrere Tabellen bearbeitet werden, muss ich die Events erst erzeugen,
wenn die Transaktionen commitet werden. D.h. ich muss mir merken, was ich innerhalb einer Transaktion mache. Ist das zu kompliziert gedacht.
Kennt jemand ein Beispiel im netz? Bin ja wohl nicht der erste der sich mit dem Thema beschäftigt?!

POST_EVENT aktiviert man z.B. im After-INSERT|UPDATE|DELETE-Trigger der jeweiligen Tabelle.
Diese Events werden aber erst NACH einem Commit ausgelöst.
Du mußt die also darum keine Gedanken machen.

SQL-Code:
CREATE TRIGGER AUFTRAG_AIUD0 FOR AUFTRAG
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  if (INSERTING) then POST_EVENT 'AUFTRAG_INSERT';
  if (UPDATING) then POST_EVENT 'AUFTRAG_UPDATE';
  if (DELETING) then POST_EVENT 'AUFTRAG_DELETE';
end
alex

Das ist aber wiederum Inerbase/Firebird abhängig. Außerdem habe ich hier den Nachteil,
dass ich nicht genau weiß welcher Datensatz sich geändert hat bzw. sogar gelöscht wurde.

alex517 28. Jun 2007 15:59

Re: Datenbankänderungen mitteilen
 
Zitat:

Zitat von Nico80
Das ist aber wiederum Inerbase/Firebird abhängig.

Das ist richtig, du hast ja auch Interbase als benutzte Datenbank angegeben.

Zitat:

Zitat von Nico80
Außerdem habe ich hier den Nachteil, dass ich nicht genau weiß welcher Datensatz sich geändert hat bzw. sogar gelöscht wurde.

Das ist auch richtig. Es können keine veränderlichen Parameter beim Event angegeben werden, da
auf der Clientseite auf die Eventbezeichung z.B. 'AUFTRAG_INSERT' reagiert wird.
Es war zwar schon mal angedacht, bei Events Parameter anzugeben (Quelle: MIR INTERBASE),
wurde aber (vorerst?) wieder fallengelassen.

alex

alzaimar 28. Jun 2007 16:21

Re: Datenbankänderungen mitteilen
 
sagt mal, gibts sowas zufällig auch für MSSQL?

alex517 28. Jun 2007 19:11

Re: Datenbankänderungen mitteilen
 
Zitat:

Zitat von alzaimar
sagt mal, gibts sowas zufällig auch für MSSQL?

MSSQL was soll'n das sein?? :-D


Die Beiträge sind schon etwas älter, vielleicht ist ja MS inzwischen ein Stück weiter gekommen:
Event1
Event2

[Laestermodus]
MS-SQL soll ja jetzt sogar Versioning können, sind wohl mit Ihrer alten Transaktionskontrolle an Grenzen gestoßen?
delphipraxis
[/Laestermodus]

Edit:
eventuell wirst du hier fündig. Ich hab nicht so die Ahnung von MSSQL.

alex

oki 28. Jun 2007 19:21

Re: Datenbankänderungen mitteilen
 
also, wenn wir schon so komich am fragen sind,

gibts so was zufällig auch für MySQL und die alte FlashFiler DB?

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz