Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mehrere versch. Objekte mit einer DB-Verbindung auslesen (https://www.delphipraxis.net/148136-mehrere-versch-objekte-mit-einer-db-verbindung-auslesen.html)

TheMiller 23. Feb 2010 13:08

Datenbank: MySQL • Version: 5 • Zugriff über: ZeosLib

Mehrere versch. Objekte mit einer DB-Verbindung auslesen
 
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!

TheMiller 24. Feb 2010 08:58

Re: Mehrere versch. Objekte mit einer DB-Verbindung auslesen
 
Morgen!

Das Problem besteht immernoch. Hat wirklich niemand eine Idee, welche der drei genannten Wege der beste ist?

Wäre nett, wenn ihr mir helfen könntet/würdet.

Vielen Dank

omata 24. Feb 2010 12:13

Re: Mehrere versch. Objekte mit einer DB-Verbindung auslesen
 
Nur mal so ein Gedanke...
Wie wäre es, wenn du einen oder auch mehrere VIEWs in der Datenbank anlegst und über diese kommunizierst.
Dann ist die Schnittstelle zu deiner Anwendung immer gleich und bei Änderungen sind eben nur die VIEWs anzupassen. Ich würde immer zu wenig Datenbankzugriffen tendieren.

TheMiller 24. Feb 2010 12:58

Re: Mehrere versch. Objekte mit einer DB-Verbindung auslesen
 
Das hört sich gut an. Mit Views habe ich allerdings noch nie gearbeitet. Kannst du mir das evtl näher erklären?

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz