Hallo,
ich weis, es ist ein blöder Titel, aber ich weis nicht, wie ich mein Problem in der Titelzeile formulieren soll.
Ich habe das Problem, dass ich ein Objekt erstelle und mit Werten aus der
DB fülle. Nun hat das Objekt eine Eigenschaft, in der ein weiteres Objekt gespeichert werden muss. Von der
DB bekomme ich nur die ID (wenn ich ohne JOINs arbeite). Wenn ich dann über meine Read-Methode das zweite Objekt auslese, wird ja das vorherige ResultSet verworfen.
Aber hier erstmal meine Definitionen:
Delphi-Quellcode:
TObjekt1 = class(TObject)
private
fEigenschaft1: String;
fBenutzer: TBenutzer;
public
property Eigenschaft1: String read fEigenschaft write fEigenschaft;
property Benutzer: TBenutzer read fBenutzer write fBenutzer;
end;
Code:
Tabelle für Objekt1:
id | benutzerid | titel | text
Tabelle für Objekt2 (benutzerID)
id | benutzername | ...
Und so lese ich meine Daten aus; Die Methode "read" ist in der
DB-Klasse deklariert:
Delphi-Quellcode:
procedure TPJDB.Read(DataObj: TObject)
begin
if (DataObj is TObjekt1) then
begin
SelectAll([tableName]);
while not (Eof) do
begin
Obj1:=TObjekt1.Create;
Obj1.Eigenschaft1:=getString('titel');
Benutzer:=TBenutzer.Create;
Benutzer.UserID:=getInteger('uid');
Obj1.Benutzer:=Benutzer;
//Read(Obj1.Benutzer)
//Das veranlasst das Überschreiben des aktuellen ResultSets.
Next;
end;
end;
Meine Frage ist jetzt, wie ich das am "schönsten" mache. Ich könnte eine
DB-Abfrage mit Joins machen, in der ich alle Daten für alle benötigten Objekte abfrage. Das hat den Nachteil, dass ich mehrere Stellen im Code ändern muss, falls sich was an der Struktur der
DB ändert.
Ich könnte aber auch alle "Grunddaten" auslesen und in einer (oder mehr) Schleife(n) die Objekte über die Read-Methode auslesen. Das hat den Nachteil, dass u.U ziemlich viele
DB-Anfragen gemacht werden müssen. Gut, lokal wäre das nicht so das Thema, aber via VPN dauert es halt länger. Das würde ohne Probleme gehen, aber ist das so toller Stil?
Eine letze Alternative, die ich noch sehe, ist, eine weitere
DB-Connection zu erstellen und diese für die Abfrage zu benutzen.
Was empfehlt ihr mir?
Vieln Dank!