Um alle Daten sofort zur Verfügung zu haben, müsstest Du ja die komplette
DB im Speicher halten. Das macht in meinen Augen wenig Sinn. Bei gescheiter Indexierung sollte auch eine Abfrage zu der Zeit, wo die Daten wirklich benötigt werden, kein großes Performanceproblem darstellen. Nehmen wir einmal Folgendes an: Du hast aus der Datendefinition der Tabelle Users eine Klasse TUser erstellt, die zunächst nur die Daten, die auch in dieser einen Tabelle definiert wurden, enthält. Nun wäre es doch kein Problem, diese Klasse um eine Methode zu erweitern, die die Einträge des aktuellen Benutzers ermittelt. Was nach meiner Erfahrung gut klappt ist, solche Auflistungen für die Darstellung in TStrings-Objekten abzulegen (das Gleiche gilt auch für die Users-Tabelle). Ein Beispiel aus dem Kopf:
Delphi-Quellcode:
procedure TUser.GetEntries(
const sl: TStrings);
var Entry: TEntry;
begin
sl.BeginUpdate;
try
sl.Clear;
//dem Objekt sei ein TQuery o.ä. zugewiesen
Query.Close;
Query.SQL.Text := '
SELECT ID,Text FROM Entries WHERE AuthorID = :id';
Query.ParamByName('
id').Value := self.ID;
Query.Open;
while not Query.EOF
do
begin
//Entry-Objekt anlegen, befüllen und in TStrings ablegen
Entry := TEntry.Create;
Entry.ID :=
Query.FieldByName('
ID').AsInteger;
Entry.AuthorID := self.ID;
Entry.Text :=
Query.FieldByName('
Text').AsString;
sl.AddObject(IntToStr(Entry.ID),Entry);
end;
finally
sl.EndUpdate;
end;
end;
Man muss halt nur darauf achten, im Delete, Clear, Destroy usw. des TStrings-Objektes die enthaltenen TEntry-Objekte wieder freizugeben.