Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

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

[OOP] Wie viele Daten aus der DB laden?

  Alt 17. Jan 2010, 12:16
Hallo,

ist vielleicht ein blöder Titel, aber mir fällt nichts besseres als Titel ein - kann ihn aber später gerne ändern.

Ich habe eine Frage bezüglich dem Laden von Daten aus der Datenbank und der Speicherung in Objekte. Also, stellt euch vor, ich möchte Artikel aus einer Datenbank laden und in einer TreeView anzeigen. Ein Artikel enthält die Felder "ArtikelID (Int), OrdnerId(int), Titel (VarChar), ArtikelText(Blob/Text), ErstelltAm(int) ...."

So, jetzt lade ich also alle Artikel aus der Datenbank, erstelle Objekte und zeige sie in einer TreeView an. So kann momentan nur die ArtikelID (in TreeView.Data) und der Titel (in der Item-Caption) verwendet bzw. angezeigt werden. Alle anderen Daten werden erst angezeigt, wenn man den Artikel öffnet.

Die Frage ist jetzt, ob ich trotzdem gleich alle Daten aus der DB laden soll, oder ob ich mir erst bestimmte Felder ausgeben lassen und die anderen bei Bedarf nachladen soll. Immerhin würde es bestimmt einiges an Arbeitsspeicher verbrauchen, immer alle Daten abzufragen. Andererseits ist es auch mehr Arbeit, die Daten nachzuladen.

Hier mal mein "Nachlade-Modell"

Delphi-Quellcode:
procedure TJKDB.Read(DataObj: TObject; Teaser: Boolean = False);
begin
  if (DataObj) is TArticle then
  begin
    if (DataObj) is TKomCategory then
  begin
    SQL_Where:='"artikelid" = '+IntToStr(TKomArticle(DataObj).ID);

    SelectAll(jkKomArticles);
 
    TKomArticle(DataObj).ID:=getInteger('artikelid');
    TKomArticle(DataObj).Titel:=getString('titel');

    //Hier werden die Daten nachgeladen
    if not (Teaser) then
    begin
      TKomCategory(DataObj).Text:=getBlob('artikeltext');
      TKomCategory(DataObj).Erstellt:=getInteger('erstelltam');
      ...
      ...
    end;
  end;
end;
Welche Methode ist die bessere? Gleich alles auf einmal oder doch lieber Nachladen - wobei das mehr "Programmier"-Aufwand ist.

Danke im Voraus
  Mit Zitat antworten Zitat