Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ermitteln ob ein Objekt (anh. "name"-Eigenschaft) existiert? (https://www.delphipraxis.net/93145-ermitteln-ob-ein-objekt-anh-name-eigenschaft-existiert.html)

little-x 1. Jun 2007 12:21


Ermitteln ob ein Objekt (anh. "name"-Eigenschaft)
 
Hallo,

ich möchte bei Bedarf ein Datenbank-Objekt (Klasse TDatabase) instanziieren, dynamisch weil ich es nicht immer sicher benötige. Im Falle der Notwendigkeit möchte ich es kreieren , in etwa mit:

Delphi-Quellcode:
   MyDatabaseObjectName:= TDatabase.Create(Application);
Das ganze möchte ich aber nur dann machen, wenn es innerhalb Application noch KEIN TDatabase-Objekt mit dem Namen MyDatabaseObjectName gibt. Die Frage ist, wie ich genau das feststelle.

Ich wüßte mir nicht anders zu helfen als so:
Delphi-Quellcode:
function existiert_datenbank_schon: boolean;
var intv: integer;
    retv: boolean;
begin
     i:= 0;
     retv:= false;
     while (i < Application.ComponentCount) and (not retv) do
     begin
         if Application.Components[i] is TDatabase then
             if TDatabase.Components[i].name = 'MyDatabaseObjectName' then
                  retv:= true;
         inc(i);
end;
Aber das jedes mal? Geht das nicht "direkter"? Ich denke Delphi ist so objektorientiert, dann muss man doch fragen können ob es ein gewisses Objekt gibt oder nicht.

Viele Grüße!

mkinzler 1. Jun 2007 12:22

Re: Ermitteln ob ein Objekt (anh. "name"-Eigenscha
 
oder .FindComponent()

dataspider 1. Jun 2007 12:39

Re: Ermitteln ob ein Objekt (anh. "name"-Eigenscha
 
Hi,

ich benutze meis folgenden Weg:
Delphi-Quellcode:
interface

uses DBTables;

type
  TMyDataBasObject = class(TDataBase)
  private
  end;

function MyDataBaseObject: TMyDataBasObject;

implementation

Var
  FMyDataBaseObject: TMyDataBasObject = nil;

function MyDataBaseObject: TMyDataBasObject;
begin
  if (FMyDataBaseObject = nil) then
  begin
    FMyDataBaseObject := TMyDataBasObject.Create(nil);
    // oder so, dann kann finalization entfallen
    // FMyDataBaseObject := TMyDataBasObject.Create(Application);
  end;
  Result := FMyDataBaseObject;
  // TODO -cMM: TMyDataBasObject.MyDataBaseObject default body inserted
end;

initialization

finalization
  if Assigned(FMyDataBaseObject) then
    FMyDataBaseObject.Free;

end.
Öffentlich ist nur die function MyDataBaseObject.
Damit wird das Objekt automatisch erzeugt, wenn ich es darüber anspreche.

Cu, Frank
[EDIT] Code war fehlerhaft...[/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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