Discussion:
Kann man Oracles dbms_alert mit der Delphi 7 ado Komponente benutzen ?
(zu alt für eine Antwort)
Daniel Wetzler
2011-06-15 13:54:31 UTC
Permalink
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
Peter
2011-06-15 18:02:50 UTC
Permalink
Post by Daniel Wetzler
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
Daniel Wetzler
2011-07-21 09:28:33 UTC
Permalink
Post by Peter
Post by Daniel Wetzler
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.
 - 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
  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
Supe, das hat geholfen. Danke !

Stefan Graf
2011-06-15 18:20:41 UTC
Permalink
Post by Daniel Wetzler
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 ?
Das ist einfach ;-)

ADOCommand.CommandText:= 'begin dbms_alert.signal
(''Test'',''TestMsg''); end;
ADOCommand1.Execute;

Wenn Du auch noch was zurück haben möchtest, lege einfach eine
PL/SQL-Funktion an und ruf sie mit TADOStoredProc auf.
--
Stefan Graf
Daniel Wetzler
2011-07-21 09:28:09 UTC
Permalink
Post by Stefan Graf
Post by Daniel Wetzler
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 ?
Das ist einfach ;-)
ADOCommand.CommandText:= 'begin dbms_alert.signal
(''Test'',''TestMsg''); end;
ADOCommand1.Execute;
Wenn Du auch noch was zur ck haben m chtest, lege einfach eine
PL/SQL-Funktion an und ruf sie mit TADOStoredProc auf.
--
Stefan Graf
Vielen Dank !
Lesen Sie weiter auf narkive:
Loading...