Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Wie Firebird richtig abfragen weil drucken extrem langsam.. (https://www.delphipraxis.net/161203-wie-firebird-richtig-abfragen-weil-drucken-extrem-langsam.html)

hoika 27. Jun 2011 11:51

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

Zitat:

Dabei wird bei "AfterScroll" der Hauptdatenbank die SubDatenbank 1 via "Select from.." gefiltert..
Die SubDatenbank 2 wird bei "AfterScroll SubDatenbank 1" gefiltert
Die SubDatenbank 3 wird bei "AfterScroll SubDatenbank 2" gefiltert
Die SubDatenbank 4 wird bei "AfterScroll SubDatenbank 3" gefiltert
Das wären bei mir dann 4 separate Queries,
mindestens die letzten 3 sind prepared,
weil ja bis auf einen variablen Tei (=Parameter) immer das gleiche abgefragt wird.

Woher weist du eigentlich, dass deine Queries ordentlich "indiziert" sind ?


Heiko

Blup 27. Jun 2011 13:01

AW: Wie Firebird richtig abfragen weil drucken extrem langsam..
 
Liste der Anhänge anzeigen (Anzahl: 2)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr.
Seite 2 von 2     12   

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