![]() |
Überprüfen ob Klasse instanziert ist
Ich suche einen Befehl zum überprüfen ob ein Klasse bereits instanziert wurde.
Genauere Erklärung: Schreibe gerade eine Middleware. Alle Datenzugriffe gehen über Objekte. Beispiel Klasse Adress verwendet Klasse Titel. Klasse anrede soll aber erst instanziert werden wenn auf sie zugegriffen wird. Das ganze liegt hinter einer Property. Mein Gedanke war die klasse eine exception schmeißen zu lassen wenn sie noch nicht instanziert ist und sie dann bei bedarf zu erzeugen. Das ganze ist natürlich von Gedanken her unschön, aber was noch schlimmer ist es funktioniert nicht und führt zu eine Stack-üblerlauf.
Code:
function TAddress.Gettitel: Ttitel;
begin try self.ftitel.InstanceSize; //wenn ich nicht existiere schmeiße ich eine exception self.ftitel.id:=self.ftitel.id; //auch eine exception except self.ftitel:=ttitel.Create(nil,MyConnection); self.titel.OnAfterSelectByID:=self.titelIdChange; end; if self.ID_TITEL <> 0 then titel.SelectByID(self.ID_TITEL); result:=self.titel; end; |
Re: Überprüfen ob Klasse instanziert ist
Wenn du die Instanzvariable mehrfach benutzt würde ich sie anschließend auf Nil setzen ( z.B. durch
Delphi-Quellcode:
)Dann kannst du mit Assigned() prüfen.
FreeAndNil(...);
|
Re: Überprüfen ob Klasse instanziert ist
Dank dir, Assigned() war was ich gesucht hatte, hatte irgendwie ein Brett vom Kopf.
Nur leider war das nicht die Lösung für mein Problem. Ich möchte folgenden Aufruf ermöglichen:
Code:
Er funktioniert mit folgender Propery:
address:=Taddress.Create(self,dbx_ME4);
address.NAME1:='Gustav'; address.NAME2:='Ganz'; address.titel.NAME:='Herr'; address.titel.insert; address.insert;
Code:
Aber ich möchte noch einen Gtter dazwischen schieben
property titel:Ttitel read ftitel write ftitel;
Code:
Das heißt die Übergabe muss wahrscheinlich per Reference gemacht werden, habe aber keine Ahnung wie das geht.
property titel:Ttitel read getitel write ftitel;
function TAddress.Gettitel: Ttitel; begin if not assigned(self.ftitel) then begin self.ftitel:=ttitel.Create(nil,MyConnection); // self.titel.OnAfterSelectByID:=self.titelIdChange; end; if self.ID_TITEL <> 0 then titel.SelectByID(self.ID_TITEL); result:=self.titel; end; Noch einen Tip? |
Re: Überprüfen ob Klasse instanziert ist
Hallo,
Zitat:
Gruß xaromz |
Re: Überprüfen ob Klasse instanziert ist
Aber warum kriege ich dann immer einen Stack-überlauf?
Edit Fehler gefunden:
Code:
function TAddress.Gettitel: Ttitel;
begin if not assigned(self.ftitel) then begin self.ftitel:=ttitel.Create(nil,MyConnection); // self.titel.OnAfterSelectByID:=self.titelIdChange; end; if self.ID_TITEL <> 0 then titel.SelectByID(self.ID_TITEL); result:=self.titel; //ruft sich selber auf, richtig ist result:=self.Ftitel end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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