![]() |
Prüfen ob ein Event zugewiesen wurde
Hi,
in einem Projekt habe ich >30 Tables denen ich von Hand das gleiche "BeforeDelete/AfterPost"-Event zugewiesen habe. Damit in Zukunft, wenn Tables hinzukommen, nicht vergessen wird diesen neuen Tables ebenfalls die Event zuzuweisen, möchte ich bei DataModul.Oncreate prüfen ob alle relevanten Tables auch das richtige Event zugewiesen wurde. Wie lautet jetzt die genaue Syntax? In meiner naivität hab ich es mir so gedacht: IF Table1.AfterDelete <> myAfterDeleteEvent THEN BEGIN END; Geht aber leider nicht :-( blöde Frage, ich weiss |
Re: Prüfen ob ein Event zugewiesen wurde
Am besten ist vermutlich mit Assigned
Delphi-Quellcode:
if not assigned(Table1.AfterDelete)
|
Re: Prüfen ob ein Event zugewiesen wurde
Zitat:
Danke Jim_Raynor das ist ja schon mal ein erster Schritt. Hab wohl heute ein Brett vorm Kopf (Hätte ich auch drauf kommen können/müssen). Wenn ich jetzt noch wüsste wie ich prüfen kann ob es das richtige event ist kann ich das Brett vorm Kopf abmontieren ;-) |
Re: Prüfen ob ein Event zugewiesen wurde
Zitat:
mache es doch genau anders herum. Weise im .OnCreate den Tabellen dein Event zu.
Delphi-Quellcode:
Dann weisst Du das es immer das richtige ist ;-)
begin
Table1.AfterDelete := myAfterDelete; end; |
Re: Prüfen ob ein Event zugewiesen wurde
Zitat:
aber das wäre dann doch viel zu einfach ;-) Nein im ernst hast recht, dokter jetzt schon seit einer stunde rum. Ist kein event zugewiesen, weise ich enfach zu. Schluss! Danke für eure Hinweise. |
Re: Prüfen ob ein Event zugewiesen wurde
Warum leitest du nicht direkt von deiner Table/DataSet/whatsoever -Komponente ab und sorgst dafür, dass dieser Code in der Situation ausgeführt wird? :gruebel:
Aber wenn du es um 10 Umwege und möglichst Quick'nDirty willst... :zwinker: |
Re: Prüfen ob ein Event zugewiesen wurde
Zitat:
um ehrlich zusein verstehe ich das nicht. Kannst du das mal für einen Dummen wie mich an einem Beispiel zeigen ;-) Dank dir |
Re: Prüfen ob ein Event zugewiesen wurde
Zitat:
Zitat:
Zitat:
|
Re: Prüfen ob ein Event zugewiesen wurde
Zitat:
Oki, fangen wir an. Wir brauchen:
Wir wollen eine Komponente ableiten, right? Also: im Menü File\New\Other anklicken Dort finden wir ein Component template (das gelbe Zahnrad). Als Ancestor Type gibst du den Namen der Table-Klasse an, die du verwendest. Als Class name nehmen wir "TSampleTableDescendant", die Palette nennen wir "DP Samples". Beim Dateinamen würde ich uSampleTableDescendant empfehlen, da der Unit name sonst gleichnamige Instanzen verhindern würde. Ein Klick auf den Button rechts daneben (der mit den 3 Pünktchen :mrgreen: ) und du kannst die Unit in den Ordner packen, in dem du auch das Package gespeichert hast. Jetzt ein Klick auf OK. Wir sehen nun einen leeren Rumpf einer Klasse, die von TXXXTable ableitet. Einfach in der Klassendefinition alles außer protected rauslöschen. In der Zeile unterhalb von protected [Ctrl + Space] drücken und DoAfterDelete auswählen. *Fump* schon haben wir den Interface teil fertig. Ein [Ctrl+Shift+C] und die Klasse ist fast fertig. Es sollte jetzt so aussehen:
Delphi-Quellcode:
Die Kommentare habe ich als Hilfestellung reingeschrieben. ;)
type
TSampleTableDescendant = class(TADOTable) protected procedure DoAfterDelete; override; end; procedure Register; implementation procedure Register; begin RegisterComponents('DP Samples', [TSampleTableDescendant]); end; { TSampleTableDescendant } procedure TSampleTableDescendant.DoAfterDelete; begin // code, der vor dem Event ausgeführt werden soll inherited; // code, der nach dem Event ausgeführt werden soll end; Jetzt alles speichern, im Menu unter View auf ProjectManager klicken und einen Rechtsklick auf unser Package machen. Rate mal was "Install" macht. :zwinker: Du kannst jetzt die neue Komponeten genauso verwenden, wie die alte. Anhand der Kommentare oben kannst du eigene Logik einfügen, die vor bzw. nach dem AfterDelete event ausgeführt werden soll. Beim Kompilieren des Packages wird die Komponente in der IDE aktualisiert. Happy :coder2: ... |
Re: Prüfen ob ein Event zugewiesen wurde
Zitat:
zuerst einmal recht herzlichen dank für die große Mühe die du dir gemacht hast. Also das mit den 500ml Kaffee hat einwandfrei geklappt :zwinker: Nein im ernst, im Grunde habe ich schon Verstanden was du meinst und du hast natürlich vollkommen Recht: das ist der elgante und richtige Weg das Problem anzugehen. Leider gibt es jedoch zwei Probleme: 1.) Problem Ich arbeit noch mit Delphi 2 :pale: (aus kompatibilitäts gründen und weil ich die meisten Bugs kenne). Also frühes Barock. Da gab es noch keine Packages und die Komponentenbiliothek neu zu compilieren kommt einem Abenteuerurlaub gleich. Ich weiss ich weiss, wirst jetzt sicher die Nase rümpfen (wie so oft hier in dem Forum) wenn ich mich als Delphi 2'er oute. Allerdings werde ich demnächst upgraden um ".net" nicht zu verpassen und weil es für ein Projekt sinnvoll ist. 2.) Problem Vorausgesetzt ich starte das Adventure und compliere die Bibliothek neu hätte ich immer noch das Urspungsproblem das ich uU. bei einer Erweiterung in ferner Zukunft vergesse die abgeleitet Komponente zu verwenden und in meinem Tran einfach die standard Table einsetzte. Wer erinnert sich schon in einem Jahr daran das es damals eine Sonderregelung gab (leider einer meiner häufigsten Fehler). Natürlich bliebe noch die >30 Table's gegen die neue Table auszutauschen aber dieser Aufwand wäre sicher grösser als eine kleine routine die (heute und in Zukunft) beim "onCreate" prüft ob alle Parameter schlüssig sind. Bitte nicht falsch vertehen. Dein vorgeschlagene Lösungsansatz wäre der Richtigere gewesen!!! Beim nächsten Projekt werde ich dies auch berücksichtigen. Nochmls vielen dank für deine Bemühungen Liebe Grüße VT |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz