Wieso hast du denn ausschliesslich statische class-Methoden?
Das ist sehr unschön und damit verbaust du Dir alle Möglichkeiten für die Zukunft.
Die Klasse TDBUser sollte auf jeden Fall eine ganz normale Klasse sein; ungefähr so:
Delphi-Quellcode:
TDBUser = class
private
FID: Integer;
FName : string;
public
property ID: Integer read FID;
property Name: string read GetName write SetName;
property LastLogon:TDateTime read FLastLogon;
end;
Die Funktion GetDBUserByLogin() sieht dann ungefähr so aus:
Delphi-Quellcode:
class function TDB.GetDBUserByLogin(aLogin:
string): TDBUser;
begin
Query.SQL.Text := '
SELECT id FROM users WHERE login=:lg';
Query.ParamByName('
lg').AsString := aLogin;
Query.Open;
if Query.IsEmpty
{besser als RecordCount=0} then
begin
Query.Close;
raise EUserDoesNotExistException.Create(aLogin
{welcher user nicht existiert ist wichtig zu wissen});
end;
result := TDBUser.Create;
// neues Obj erzeugen !
result.ID :=
Query.FieldByName('
id').AsInteger;
result.
Name :=
Query.FieldByName('
Name').AsString;
....
Query.Close;
end;
Der Aufrufer GetDBUserByLogin() muss dann das TDBUser-Objekt freigeben.
Falls Dir das nicht gefällt, kann man auch auf Interfaces ausweichen.
Damit werden die TDBUser-Objekte automatisch freigegeben (über die Referenzzählung).