Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DB-Ereignis in anderer Unit abfangen (https://www.delphipraxis.net/14380-db-ereignis-anderer-unit-abfangen.html)

meggles 8. Jan 2004 09:15


DB-Ereignis in anderer Unit abfangen
 
Hi Leute,
ich habe mir ein Datenmodul gebastelt, in dem DB-Routinen zur Speicherung von Emails enthalten sind. Zwei Units greifen darauf zu; die Unit des Client-Programms und die Unit des Server-Programms.
Sowohl das Client-als auch das Serverprogramm sollen in der Statusbar die Information "Datenbank online" bzw "offline" darstellen können. Nun das Problem:
uClient uses uDM
uServer uses uDM
Wie kann ich aus einer der beiden Units auf ein Ereignis, resp. "AfterConnect" und "AfterDisconnect" im DM reagieren?
Vielen Dank,
Simon

Leuselator 8. Jan 2004 09:32

Re: DB-Ereignis in anderer Unit abfangen
 
wenn ich Dich richtig verstehe, müßtest Du in UClient z.B. eine Objektmethode als Ereignisbehandlungsroutine für das Ereignis deklarieren und dann mit uDM.Objekt.OnAfterConnect := Objekt.ObjektMethode zuweisen?

Smokey 8. Jan 2004 09:35

Re: DB-Ereignis in anderer Unit abfangen
 
Du könntest zum Beispiel in den Events Set-Funktionen der beiden Units aufrufen, die Public deklariert sind und eine Variable wie bConnected auf True setzen.

Oder wär das in dem Fall zu simpel?
Wenn du die Absolute Trennung der DB Unit von den beiden anderen aufrecht erhalten willst ist es natürlich ungeschickt so.
Dann müsstest du von den anderen Units auf eine Public Funktion der DBUnit zugreifen und den Status abfragen.
Ein anderes Stichwort wären Observer. Aber ka in wie weit da Delphi was anbietet oder man es selber zusammenhäkeln muss.

mfg
smk

Garby 8. Jan 2004 09:48

Re: DB-Ereignis in anderer Unit abfangen
 
Hallo,

da du wahrscheinlich den Client und den Server nicht gleichzeitig laufen hast, kannst du das Ereignis direkt aus der Server-, bzw. Client-Unit überschreiben.
Delphi-Quellcode:
// procedure deklarieren
procedure doConnect(Sender: TObject);
...und dann im Create des Servers(und auch Client) das Ereignis zuweisen:
Delphi-Quellcode:
DataModul1.Connection1.onConnect := doConnect;
Den Genauen Syntax der Methode habe ich hier nur angenommen.

meggles 8. Jan 2004 10:03

Re: DB-Ereignis in anderer Unit abfangen
 
Danke für den Tip - ich habs ausprobiert, kassiere aber folgende Fehlermeldung:
"Inkompatible Typen: 'TIBConnection' und 'TObject'"
Ich schwimme in der Ereignis-Materie noch ein wenig, aber müsste ich "doConnect" nicht als Ereignis (TIBCOnnection_Event)definieren...?
Gruß,
Simon

Garby 8. Jan 2004 10:14

Re: DB-Ereignis in anderer Unit abfangen
 
Hallo,

Zitat:

Zitat von Garby
Den Genauen Syntax der Methode habe ich hier nur angenommen.

Das bedeutet, dass ich die Methode nicht richtig deklariert habe.

In diesem Fall wird es wohl mit
Delphi-Quellcode:
procedure doConnect(Sender: TIBConnection);
funktionieren.

Der einfachste Weg ist: im OI das gewünschte Ereignis doppelclicken, damit wird eine Ereignisprocedure im Editor erzeugt, die du dann nur mehr kopieren brauchst :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.

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