AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen ob ein Event zugewiesen wurde

Ein Thema von vt670 · begonnen am 6. Jun 2005 · letzter Beitrag vom 7. Jun 2005
Antwort Antwort
vt670

Registriert seit: 20. Mai 2005
24 Beiträge
 
#1

Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 11:38
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
Es ist besser zu schweigen und als Idiot zu gelten als zu Reden und dadurch den Beweis anzutreten.
A. Lincoln
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 11:42
Am besten ist vermutlich mit Assigned

if not assigned(Table1.AfterDelete)
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
vt670

Registriert seit: 20. Mai 2005
24 Beiträge
 
#3

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 11:51
Zitat von jim_raynor:
Am besten ist vermutlich mit Assigned

if not assigned(Table1.AfterDelete)

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
Es ist besser zu schweigen und als Idiot zu gelten als zu Reden und dadurch den Beweis anzutreten.
A. Lincoln
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 11:55
Zitat von vt670:
.... möchte ich bei DataModul.Oncreate prüfen ob alle relevanten Tables
auch das richtige Event zugewiesen wurde....
Hai vt670,

mache es doch genau anders herum. Weise im .OnCreate den Tabellen dein Event zu.
Delphi-Quellcode:
begin
  Table1.AfterDelete := myAfterDelete;
end;
Dann weisst Du das es immer das richtige ist
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
vt670

Registriert seit: 20. Mai 2005
24 Beiträge
 
#5

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 12:32
Zitat von Sharky:
Hai vt670,

mache es doch genau anders herum. Weise im .OnCreate den Tabellen dein Event zu.
Delphi-Quellcode:
begin
  Table1.AfterDelete := myAfterDelete;
end;
Dann weisst Du das es immer das richtige ist
Hi Sharky,

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.
Es ist besser zu schweigen und als Idiot zu gelten als zu Reden und dadurch den Beweis anzutreten.
A. Lincoln
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 12:37
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?
Aber wenn du es um 10 Umwege und möglichst Quick'nDirty willst...
  Mit Zitat antworten Zitat
vt670

Registriert seit: 20. Mai 2005
24 Beiträge
 
#7

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 12:46
Zitat von Robert_G:
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?
Aber wenn du es um 10 Umwege und möglichst Quick'nDirty willst...
Hi Robert,

um ehrlich zusein verstehe ich das nicht.
Kannst du das mal für einen Dummen wie mich an einem Beispiel zeigen
Dank dir
Es ist besser zu schweigen und als Idiot zu gelten als zu Reden und dadurch den Beweis anzutreten.
A. Lincoln
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 14:11
Zitat von vt670:
um ehrlich zusein verstehe ich das nicht.
Aber von Objektorientierter Programmierung hast du schon mal etwas gehört, oder?
Zitat von vt670:
Kannst du das mal für einen Dummen wie mich an einem Beispiel zeigen
Hmm... Das würde mehr Zeit kosten als ich in meinen kleinen "DP-Pausen" habe. Ergo muss ich dich auf heute Abend vertrösten...
Zitat von vt670:
Dank dir
Nur nicht so voreilig.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 6. Jun 2005, 22:20
Zitat von Robert_G:
Hmm... Das würde mehr Zeit kosten als ich in meinen kleinen "DP-Pausen" habe. Ergo muss ich dich auf heute Abend vertrösten...
Ist zwar erst später Nachmittag, aber ich werde mal mein Versprechen einhalten.
Oki, fangen wir an.
Wir brauchen:
  • Delphi
  • 500ml Kaffee
  • ein neues Projekt (Package)
Das Package speichern wir als SampleTableDescendant ab.
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 ) 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:
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;
Die Kommentare habe ich als Hilfestellung reingeschrieben.
Jetzt alles speichern, im Menu unter View auf ProjectManager klicken und einen Rechtsklick auf unser Package machen.
Rate mal was "Install" macht.
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 ...
  Mit Zitat antworten Zitat
vt670

Registriert seit: 20. Mai 2005
24 Beiträge
 
#10

Re: Prüfen ob ein Event zugewiesen wurde

  Alt 7. Jun 2005, 11:36
Zitat von Robert_G:
Wir brauchen:
  • Delphi
  • 500ml Kaffee
  • ein neues Projekt (Package)
Hallo Robert,

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
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 (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
Es ist besser zu schweigen und als Idiot zu gelten als zu Reden und dadurch den Beweis anzutreten.
A. Lincoln
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 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