Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Mehrere versch. Objekte mit einer DB-Verbindung auslesen

  Alt 23. Feb 2010, 13:08
Datenbank: MySQL • Version: 5 • Zugriff über: ZeosLib
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!
  Mit Zitat antworten Zitat