Entwickler-Ecke

Datenbanken - ZEOS EventAlert


lars2002 - Mi 03.02.10 14:02
Titel: ZEOS EventAlert
Moin,

irgendwie bekomm ich den EventAlert der ZEOS Lib nicht zum laufen.

Ich hab eine Tabelle die nach einem INSERT ein Event auslöst (dieser Teil funktioniert auch der Event Monitor von FlameRobin zeigt es korrekt an) versuch ich allerdings das Event mit dem ZIBEventAlerter aufzufangen passiert nichts.

ZConnect ist verbunden, ZIBEventAlert mit den Eigenschaften

Delphi-Quelltext
1:
2:
3:
4:
AutoRegister := true;
Connection := ZConnection1;
Events enthält das Event
Registered := false;


Ereignisse:

OnEventAlert soll einfach nur in ne ListBox geschrieben werden.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ZConnection1.Connected:=true;
  ZIBEventAlerter1.AutoRegister:=true;
end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  ZConnection1.Connected:=false;
end;

procedure TForm1.ZIBEventAlerter1EventAlert(Sender: TObject; EventName: string;
  EventCount: longint; var CancelAlerts: boolean);
begin
  ListBox1.Items.Add(EventName);
end;


Hat irgendjemand von euch eine Idee wo der Fehler sein könnte?

Danke und Gruß Lars

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt
Moderiert von user profile iconmatze: Code- durch Delphi-Tags ersetzt


Xentar - Mi 03.02.10 16:00

Du musst der Komponente auch mitteilen, WELCHE Events registriert werden soll.
Soweit ich weiß registriert diese nicht erstmal alle, sondern wirklich nur die, die man in RegisteredEvents (glaub ich) eingetragen hat.


lars2002 - Mi 03.02.10 16:30

Hallo,

danke erstmal ich hab das Event direkt im Objektinspektor unter ZIBEventAlert1.Events eingetragen muss ich die dann nochmal extra registrieren?

Gruß Lars


Xentar - Mi 03.02.10 16:41

Ach, hast du schon eingetragen. Tschuldigung, hab ich überlesen.

Ich persönlich vertrau eigentlich nicht auf die Funktion AutoRegister, sondern lass dsa lieber auf False, und ruf selber RegisterEvents auf, wenn ich weiß, dass es soweit ist. Vielleicht hilft das auch bei dir?


lars2002 - Mi 03.02.10 17:36

Hmm hab das ganze dann mal wie folgt geändert, aber das Ergebniss bleibt das selbe...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ZConnection1.Connected:=true;

end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  ZConnection1.Connected:=false;
end;

procedure TForm1.ZConnection1AfterConnect(Sender: TObject);
begin
  ZIBEventAlerter1.RegisterEvents;
end;

procedure TForm1.ZConnection1BeforeDisconnect(Sender: TObject);
begin
  ZIBEventAlerter1.UnRegisterEvents;
end;

procedure TForm1.ZIBEventAlerter1EventAlert(Sender: TObject; EventName: string;
  EventCount: longint; var CancelAlerts: boolean);
begin
  ListBox1.Items.Add(EventName);
end;


Moderiert von user profile iconmatze: Code- durch Delphi-Tags ersetzt


lars2002 - Do 04.02.10 10:16

Hmm da das beim besten willen nicht klappen will, gibt es andere Möglichkeiten um neue Einträge in der Datenbank möglichst "sofort" zu erkennen um die Listen im Client upzudaten?

Ist z.B. bei jedem Eintrag wird in eine extra Tabelle der Tabellenname wo sich was änderte und nen Zeitstamp geschrieben und die Clients fragen alle paar Sekunden dadurch ab ob sich was geändert hat seit der letzten Nachfrage Performancmäßig vertretbar?

Gruß Lars