Einzelnen Beitrag anzeigen

Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#6

Re: Optimieren der Datenbankabfragen für Reportpipelines

  Alt 9. Sep 2009, 15:37
..nehmen wir noch mal die Demostruktur:
Delphi-Quellcode:
Kunde1
     Detail 1
         Arbeit 1
         Arbeit 2
         Arbeit 3
             Arbeitsbeschreibung 1
                Beschreibungsdokument 1
                Beschreibungsdokument 2
     Detail 2
         Arbeit 1
         Arbeit 2
     Detail 3
     Detail 4
         Arbeit 1
             Arbeitsbeschreibung 1
Kunde 2
wenn die Tabelle "Kunden" selectiert wird, wird anschließend die Tabelle "Detail" gefiltert (wegen afterScroll),
dadurch wird anschließend die Tabelle "Arbeit" gefiltert (wegen afterScroll),
dadurch wird anschließend die Tabelle "Arbeitsbeschreibung" gefiltert (wegen afterScroll),
dadurch wird anschließend die Tabelle "Beschreibungsdokument " gefiltert (wegen afterScroll),
u.s.w.
Wenn nun Arbeit 2 angesprungen wird, fängt die "afterScroll Sql-Aktion" ja wieder an..

Ich stell mir eher so was vor:
wenn die Tabelle "Kunden" selectiert wird,
wird anschließend jeder Eintrag von "Details" selektiert, der mit dem Kunden in Verbindung steht.
Anschließend wird jeder Eintrag von "Arbeit" selektiert, der mit dem Kunden in Verbindung steht.
Anschließend wird jeder Eintrag von "Arbeitsbeschreibung" selektiert, der mit dem Kunden in Verbindung steht.
Anschließend wird jeder Eintrag von "Beschreibungsdokument " selektiert, der mit dem Kunden in Verbindung steht.

und im afterScroll so was ähnliches wie:

Delphi-Quellcode:
ppBDEPipeline.ClearBookmarkList;
Tabelle first,
while not Tabelle.EOF do
begin
if Datensatz erfüllt Bedingung then setze Bookmark auf diesen..
Tabelle.next;
end;

Also wird einmal pro Tabelle ein SQL geschossen und der Client hat die gefilterte Datenmänge mal "vor sich"
via Bookmarks sag ich der Pipeline, welche Daten sie drucken soll..

wie könnte ich das "Bookmark setzen" für die Pipeline realisieren ?
Beispiel zur Frage:
Delphi-Quellcode:
Query1 = Select * from Tabelle
Datasource1 ist Verbunden mit Query1
ppDBPipeline1 ist verbunden mit Datasource1

ppBDEPipeline1.ClearBookmarkList
  Schleife durch das Query
    if Query1.fieldbyname('xy').asstring = 'yeppthen setze ein Bookmark für die Pipeline
  Schleife ende
Erich Wanker - for life:=1971 to lebensende do begin ..
  Mit Zitat antworten Zitat