Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.445 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Wie Firebird richtig abfragen weil drucken extrem langsam..

  Alt 27. Jun 2011, 13:01
Für optimale Geschwindigkeit müsste man den gesamten Report neu aufbauen:

Zuerst die ganzen Einzelabfragen auf eine reduzieren:
Code:
select   * {oder einschränken welche Felder gebraucht werden}
from     SubDatenbank1
left join SubDatenbank2 on {hier 1 und 2 verknüpfen}
left join SubDatenbank3 on {hier 2 und 3 verknüpfen}
left join SubDatenbank4 on {hier 3 und 4 verknüpfen}
where    {Bedingung für SubDatenbank1}
Jetzt wird nur noch eine Abfrage an den Server gesendet und der Server muss nur einmal einen großen Datenblock zurückgeben.

Der Report bekommt eine Pipeline die mit dem Dataset verbunden wird.
Im Reportbuilder erstellt man sich für jede Unterabfrage eine Gruppe, gruppiert wird über das Feld aus der Join-Bedingung:

Siehe: Groups.jpg

Die Darstellung der Daten erfolgt im einfachsten Fall so:

Informationen aus SubDatenbank1 in GroupHeader0/GroupFooter0
Informationen aus SubDatenbank2 in GroupHeader1/GroupFooter1
Informationen aus SubDatenbank3 in GroupHeader2/GroupFooter2
Informationen aus SubDatenbank4 in Detail

Siehe: ReportGroups.jpg

Falls nicht für jeden Masterdatensatz auch mindestens ein Detail in der untergeordneten Datenmenge existiert, kann man im BeforePrint des Detail, bzw. GroupHeader/GroupFooter die Felder auf Null prüfen und abhängig davon das jeweilige Band ein- oder ausblenden.
Angehängte Grafiken
Dateityp: jpg Groups.jpg (26,0 KB, 6x aufgerufen)
Dateityp: jpg ReportGroups.jpg (25,5 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat