Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi mittels Interbase-Event einen Wert an Delphi schicken (https://www.delphipraxis.net/14625-mittels-interbase-event-einen-wert-delphi-schicken.html)

meggles 12. Jan 2004 17:36


mittels Interbase-Event einen Wert an Delphi schicken
 
Hallo,
die Referenz zu Interbase 7 verstehe ich so, dass in einem Event der Eventname,
SQL-Code:
POST_EVENT 'hallo'
als auch ein Wert
SQL-Code:
POST_EVENT new.ID
übermittelt werden kann.

a) Ist das nun überhaupt richtig? Oder falsch verstanden... (bitte nicht :? )
b) Ich verwende aus den IBObjects die IBEvent-Komponente. Mit der kann ich zwar schon ein Event abfangen, jedoch sehe ich in
Delphi-Quellcode:
procedure TForm2.IBEventEventAlert(Sender: TObject; AEventName: String;
  AEventCount: Integer);
nirgendwo die Möglichkeit, auf meinen 'new.ID'-Wert zuzugreifen.

Könnt Ihr mir da helfen?

Vielen Dank,
Simon

Lemmy 13. Jan 2004 06:43

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
Hi,

hast Du schon mal versucht mit dem AEventName was zu machen?? Steckt vielleicht da der Integer-WErt drin??
Prinzipiell würde ich aber die Events nicht zum Werte verschicken nehmen, da sind die einfach zu unsicher. Zudem machen IB/FB-Events angeblich die Programme instabil, vorallem auf den neueren Windows-Versionen....

Mich würde noch interessieren was Du damit machen willst - vielleicht gibt es noch ne andere Lösung!?

Grüße
Lemmy

meggles 13. Jan 2004 08:29

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
Moinmoin,
ich programmiere an einem Datenbank-gestützten Emailprogramm, genauer zwei Programme.
Server: Holt für alle Nutzer die Emails per POP ab und schiebt sie in eine Tabelle TAB_EMAIL. Zu jeder Email wird auch der FK_Ordner des Posteingangs eines Users gespeichert.
Auf dies TAB_EMAIL möchte ich einen Afert-Insert-Trigger loslassen:
SQL-Code:
CREATE TRIGGER TAB_EMAIL_AI5_EVENT FOR TAB_EMAIL
ACTIVE AFTER INSERT POSITION 5
AS
DECLARE VARIABLE V_Ordnername VARCHAR(50);
begin
  SELECT o.name FROM tab_ordner o WHERE (o.id = new.ordner_id) INTO :V_Ordnername;
  IF (v_ordnername = 'Posteingang') THEN POST_EVENT new.Ordner_ID;
end
Dieses Event soll für den (betreffenden) Email-Client Zeichen sein, seinen Posteingang zu refrehen, damit die Email gleich sichtbar wird.

Wenn das nicht gehen sollte, müsste ich - sofern ich mit Events arbeiten will - für jeden Nutzer eine Tabelle anlegen, damit ich auch unterschiedliche Events (z.B. POST_EVENT 'maxmustermann') bekomme.

Hoffe, Du kannst mir da helfen - Danke gleich mal!
Simon

Garby 13. Jan 2004 09:24

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
Hallo,

leider habe ich keine Erfahrung mit IB-Events.
In Oracle kann man bei der Event-Komponente einstellen, auf welche Events überhaupt reagiert wird.

In diesem Fall würde ich es über AEventName abwickeln.
Der setzt sich dann einfach über den Event-Typ- und dem jeweiligen Usernamen zusammen.

Lemmy 13. Jan 2004 09:53

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
Hi meggles,

ich verwende auch grundsätzlich keine Events weil die lt. einigen Beiträgen in verschiedenen Foren die Programme instabil werden lassen.
Zudem werden Events ja auch nicht "gerichtet" an irgendjemand gesendet, sondern die Nachricht wird an alle erreichbaren PC's gesendet, was die Netzwerkbelastung ansteigen lässt.

Zu Deinem Problem: Wenn Du das mit Events machst und den Event "Post abholen" sendest, wird jeder Client der am Laufen ist überprüfen, ob Post für Ihn da ist -> Netzwerk und der DB-Server werden stark belastet. Auch mit einem persönlichen Event wird es nicht wirklich gut.

Vorschlag: Verwende einen TCP/IP Server und Client (z.B. Indy, ICS,..) und versende mit diesem direkt an den entsprechenden PC die Nachricht. Der Client muss sich dazu beim Start am Server anmelden und die IP sowie den Benutzer hinterlegen. Beim Empfang eines Mails überprüft nun der Server ob der User angemeldet ist. WEnn ja, wird an die IP eine entsprechende Nachricht gesendet und der Client kann dann die Mails abholen.

Grüße
Lemmy

meggles 13. Jan 2004 10:09

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
Potzblitz - das isses ! :hello:
Vielen Dank!

Simon

mojo777 15. Dez 2006 23:42

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
hallo,
ich sitze heute auch an den events und irgendwie willes mir nicht gelingen die teile zum laufen zu bringen.
ich habe mir das ganez so vorgestellt:
server: post_Event 'PROZENT{55}';

in delphi mit TIBEvents:

Delphi-Quellcode:
procedure TdmEvents.calcEventEventAlert(Sender: TObject; EventName: String;
  EventCount: Integer; var CancelAlerts: Boolean);
begin
if checkZeichen(EventName, 'PROZENT') then //schaut nach ob das "PROZENT" in dem namen drin steckt
  begin
  fmWarten.pbWarten.Position:=StrToInt(GiBWert(EventName)); //wartestatusanzeige...
  Application.ProcessMessages;
  end;
end;
so. autoregister:=True;
Registered:= ???

wenn die Stored procedures im server auf gerufen werden, die diese events generieren, passiert in delphi nix.
also die im debugger in die procedure gesetzten haltepunkte werden nicht angesteuert...


hab ich da irgendwo ein knick in der logik?

wäre für hilfe sehr dankbar . :-)



grüße

ol1uw 16. Dez 2006 01:35

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
Hallo,

Also wenn ich mich recht erinnere muss das Event registriert werden um darauf reagieren zukönnen
also sind dynamische Eventnamen so nicht möglich.
Da der Client eben für dieses Event nicht registriert ist.

Uwe

hanspeter 16. Dez 2006 07:40

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
Zitat:

Zitat von mojo777
hallo,
ich sitze heute auch an den events und irgendwie willes mir nicht gelingen die teile zum laufen zu bringen.


hab ich da irgendwo ein knick in der logik?

wäre für hilfe sehr dankbar . :-)


Der Event muss vorher registriert werden.

Ich verwende die Steuerung in einem System, wo sich Clients auf unterschiedliche Server automatisch aufschalten sollen.

procedure TData.InitEvent(CbxKanal1: TComboBox);
var i : Integer;
begin
IB_Events.UnregisterEvents;
IB_Events.Events.Clear;

for i:= 0 to Host.count-1 do begin
if TArbeitsplatz(Host[i]).Arbeitsplatz = CBXKanal1.Text then
begin
EventName := TArbeitsplatz(Host[i]).EventName;
UserID := TArbeitsplatz(Host[i]).UID;
IB_Events.Events.Add(EventName);
end;
end;
IB_Events.RegisterEvents;
end;


Gruß Peter

Jelly 16. Dez 2006 09:31

Re: mittels Interbase-Event einen Wert an Delphi schicken
 
Alternativ kannst Du auch vom Client aus in regelmässigen Abständen den Interbase Server pollen. Dabei wirst Du dann auch sehr leicht feststellen können, ob überhaupt noch eine Verbindung zum Server besteht... Persönlich bin ich auch kein Freund von solchen Datenbank Events.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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