![]() |
Re: Optimieren der Datenbankabfragen für Reportpipelines
Hallo,
Zitat:
|
Re: Optimieren der Datenbankabfragen für Reportpipelines
Hallo,
ob Table.Filter eine Query loslässt hängt von der Komponente ab. ZEOS macht das aber glaube ich wirklich so. Die haben doch einen SQL-Monitor, den würde ich mal anwerfen. Viell. hilft ja auch ein Neubau der Indizes. (alter index inactive / alter index active). Aber zuerst muss mal rausgefunden werden, was so lange dauert (viele Selects / Traffic / fehlende Indizes) Da würden unter FB2 viell. auch die Monitoring Tabellen helfen. Heiko |
Re: Optimieren der Datenbankabfragen für Reportpipelines
Wenn für die Anzeige nicht alle Daten der Tabelle benötigt werden, könnte man die urspüngliche Bedingung für den Master auch bei jeder Detailabfrage mit angeben und erst danach filtern.
Im Prinzip so:
SQL-Code:
Alternativ eine Abfrage die alle erforderlichen Daten holt, diese in Objekten speichern und jeweils in TppJITPipeline bereitstellen.
select *
from t_kunden where (bedingung) select d.* from t_kunden k left join t_details d on (d.id_kunde = k.id) where (bedingung) select a.* from t_kunden k left join t_details d on (d.id_kunde = k.id) left join t_arbeit1 a on (a.id_detail = d.id) where (bedingung) |
Re: Optimieren der Datenbankabfragen für Reportpipelines
..ich werd mal folgendes in meine Anwendung einbauen ..
Ich schicke für jede Tabelle NUR EIN SQL-Statement zum Server. Somit hab ich auf der Clientseite alle Daten für den Report. Clientseitig setz ich dann bei den verschiedenen AfterScroll-Ereignissen div. Bookmarks... Wenn Bookmarks gesetzt werden - druckt der Reportbuilder nur die gebookmarkten Datensätze Wenn keine Bookmarks gesetzt sind, switche ich die Query für die Reportpipeline auf eine leere (zQuery2)
Delphi-Quellcode:
procedure TForm1.SpeedButton5Click(Sender: TObject);
var i:integer; begin ppDBPipeline1.DataSource:=DataSource1; zquery1.DisableControls; i:=0; ppDBPipeline1.ClearBookmarkList; zquery1.First; while not zquery1.Eof do begin if AnsiContainsText(zquery1.FieldByName('OBJECT_NAME').AsString,edit1.Text) then // <- somit spar ich mir ein SQL Statement begin ppDBPipeline1.SetBookmark; i:=1; end; zquery1.Next; end; if i = 0 then begin ppDBPipeline1.DataSource:=DataSource2; // keine Bookmarks wurden gesetzt end; ppReport1.Print; zquery1.EnableControls; zquery1.First; end; .ob das ganze dann wirklich schneller wird - werd ich noch berichten .. LiGrü Erich |
Re: Optimieren der Datenbankabfragen für Reportpipelines
:-) ..
ok .. kurzum: es geht min. 10 mal schneller. Alle benötigten Daten holen .. auf die relevanten ein Bookmark setzen und drucken lassen.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz