Dann kann es sein, daß der Compiler, Aufgrund deiner komischen Sichtbarkeitsreglungen, durchdreht.
Dein TDBUser ist als Private deklariert, aber du willst es in Public verwenden, als Result für eine Public-Methode/Property.
So komisch sind die eigentlich garnicht. In C# hab ich solche Konstrukte schon haufenweise verwendet. Ohne Probleme.
Ich habe aber testweise die TDBUsers als ganz eigenständige Klasse gesetzt, was leider noch immer nichts an dem Problem geändert hat. GetDBUserByLogin() wird noch immer geflissentlich gemieden, obwohl explizit auf die zugehörige Property lesend zugegriffen wird
. Daran lag es leider nicht. (Was heisst leider... das wäre recht dümmlich, wenn sowas nicht in Delphi ginge
)
EDIT: Okay, lustig...
Ich habe noch eine weitere Property "Users", die wie "UsersByLogin" arbeitet, aber eben eine ID statt eines Logins nimmt:
Delphi-Quellcode:
TDB = class
private
class var FQuery: TUniQuery;
class var FUser: TDBUser;
class function GetDBUser(aUserID: Integer): TDBUser; static;
class function GetDBUserByLogin(aLogin: string): TDBUser; static;
public
class property Users[aUserID: Integer]: TDBUser read GetDBUser;
class property UsersByLogin[aLogin: string]: TDBUser read GetDBUserByLogin;
end;
implementation
class function TDB.GetDBUser(aUserID: Integer): TDBUser;
begin
FUser.FID := aUserID;
result := FUser;
end;
Folgenden Methode:
Delphi-Quellcode:
procedure TframeUsers.btnResetPasswordClick(Sender: TObject);
var
id: Integer;
begin
id := qryUsers.FieldByName('id').AsInteger; // <---- !!!
TDB.Users[id].Password := '';
end;
Hier wird mir vom Compiler gemeldet, dass der auf "id" zugewiesene Wert nicht mehr verwendet wird!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)