Kann man Oracles dbms_alert mit der Delphi 7 ado Komponente benutzen ?

15/06/2011 - 15:54 von Daniel Wetzler | Report spam
Liebe Delphi Experten,

ich bin relativ neu bei der Delphi Programmierung und suche derzeit
einen Weg, wie man in eine
Delphi 7 Applikation die Behandlung von Oracle Alerts einbauen kann.
Ich habe zwar ein Beispiel für ein Programm mit Oracle direct
Komponente, diese darf ich aber nicht benutzen.

Kann mir jemand mit einem Coding Beispiel oder einer Referenz auf eine
gute Webseite oser Buch weiterhelfen ?

Viele Grüße,

Daniel
 

Lesen sie die antworten

#1 Peter
15/06/2011 - 20:02 | Warnen spam
Daniel Wetzler wrote:

Liebe Delphi Experten,

ich bin relativ neu bei der Delphi Programmierung und suche derzeit
einen Weg, wie man in eine
Delphi 7 Applikation die Behandlung von Oracle Alerts einbauen kann.
Ich habe zwar ein Beispiel für ein Programm mit Oracle direct
Komponente, diese darf ich aber nicht benutzen.

Kann mir jemand mit einem Coding Beispiel oder einer Referenz auf eine
gute Webseite oser Buch weiterhelfen ?



So schrecklich schwierig ist die Verwendung der dbms_alert package
nicht. Du brauchst dazu allerdings eine sekundàren Thread, die Query
für die Alerts blockiert, bis eine Session auf dem Server einen Alert
in die Queue stellt.

Der Thread muß also folgendes in seiner Execute-Methode machen:

- sich an die Datenbank anmelden (eine Session öffnen).
- sich für die Events registrieren, die ihn interessieren. Das
SQL-Statement dafür ist

begin
sys.dbms_alert.register('Eventname1');
sys.dbms_alert.register('Eventname2');
... optional noch mehr events
end;

D.h. man konstruiert einen PL/SQL Block, packt ihn in die
SQL-Eigenschaft einer Query-Komponente, und führt ihn aus.

Danach kommt dann die Warteschleife. Man baut eine Query mit drei
Parametern:

begin
sys.dbms_alert.waitany(:eventname, :eventmessage, :eventstatus);
end;

wobei eventstatus einen Integer bekommt und die beiden anderen einen
String. Wenn man die Query ausführt blockiert sie, bis ein Event
eintrifft. Wenn daß passiert analysiert man den Inhalt der drei
Parameter, gibt den Event irgendwie an den Mainthread weiter (z. B.
über eine Windows-Message), und wartet dann weiter, wenn der Thread
nicht mittlerweile Terminated = true aufweist.

Das ganze kontrolliert abzubrechen (z. B. beim Ende des Programms)
macht man üblicherweise entweder, indem man aus dem Mainthread heraus
die von der Query verwendete Session zum Abbruch der Query anweist
(hàngt von der Session-Komponente ab, ob sie das unterstützt), oder man
generiert aus einer anderen Session heraus einen Event, den man zu
diesem Zweck registriert hat.



Peter Below

Ähnliche fragen