Hallo zusammen,
bisher wurde in einer Anwednung, die ich betreue folgendes verwendet
Delphi-Quellcode:
function LoadFromDB(iID:Integer):TMyClass;
begin
Result := TMyClass.Create;
...
Result.ID = dbQuery.FieldByName('ID').AsInteger;
...
end;
function GetMyClass(iID:Integer):TMyClass
begin
Result := nil;
for i:= 0 to MyClassList.Count-1 do
begin
if MyClassList[i].ID = iID then
begin
Result := MyClassList[i];
break;
end;
end;
if Result = nil then
begin
Result := LoadFromDB(iId);
if Result <> nil then
MyClassList.Add(Result);
end;
end;
Das heißt die Klasse wurde in der Function erstellt und als Result zurück gegeben. Das funktioniert so weit auch fehlerfrei auch wenn es unschön ist, dass die Klasse "fremderzeugt" wird.
Ich möchte jetzt aber z.B. ein Refresh einbauen und muss damit der LoadFromDB sagen, dass die Klasse schon existiert und diese auch übergeben.
Mein Konstrukt sähe also eher so aus
Delphi-Quellcode:
function LoadFromDB(aMyClasse:TMyClass; iID:Integer):Boolean;
// oder besser LoadFromDB(var/const aMyClasse:TMyClass; iID:Integer) ????????
begin
...
SQL um Datensatz zu finden
Result :=
not sql.IsEmpty;
...
aMyClasse.ID = dbQuery.FieldByName('
ID').AsInteger;
...
end;
function GetMyClass(iID:Integer; bRefresh:Boolean):TMyClass
begin
Result :=
nil;
for i:= 0
to MyClassList.Count-1
do
begin
if MyClassList[i].ID = iID
then
begin
Result := MyClassList[i];
break;
end;
end;
if (Result =
nil)
or bRefresh
then
begin
bNew := False;
if Result :=
nil then
begin
Result := TMyClass.Create;
bNew := True;
end;
if not LoadFromDB(Result, iId)
then // Wenn nichts gefunden wieder Free
FreeAndNil(Result);
if bNew
and (Result <>
nil)
then
MyClassList.Add(Result);
end;
end;
Zwei Fragen:
- Gibt es ein grundsätzliches Strukturproblem bei dem neuen Aufbau
- Wie unterscheidet sich bei einer Klasse ob ich die Klasse als Var, Const oder ohne Zusatz in der Parameterliste übergebe
Ich habe mal irgendwo gefunden, wie sich das unterscheidet, finde es aber leider nicht mehr. Bei Variablen ist es klar, aber bei dem Pointer??
Ich meine es war so was wie
- Var MyClass könnte auch in LoadFromDB erstellt werden wenn NIL rein gegeben wird
- Const MyClass muss schon erstellt sein
- und ohne Zusatz?
Grüße
Gerd