![]() |
Quickreport: der gleiche Report mehrmals im Composite-Report
Hi mal wieder.
Habe mal wieder ein Problem: Ich möchte, dass ein Report mehrmals zur CompositeReport-Komponente hinzugefügt wird. (natürlich mit verschiedenen Inhalten) Klappt soweit auch ganz gut: In der OnAddReports-Methode des CompositeReports steht also folgendes (stark zusammengefasst):
Delphi-Quellcode:
zur Erklärung:
for z := 0 to m_liste.Lines.Count-1 do
begin frm_tba_rechn.q_needdata.SQL.Text := 'SELECT * FROM ' + unit3.einst_t_tba_rechn + ' WHERE vorgang = ' + quotedstr(t_vorgang); frm_tba_rechn.q_needdata.Open; cr_tba_rechn.Reports.Add(frm_tba_rechn.quickrep2); end; - t_vorgang enthält in jedem Durchlauf den String aus einer Zeile des memos "m_liste" - q_needdata bildet die Grundlage des Reports, der aber in der OnNeedData "bestückt" wird (also keine DB-Felder im Report enthalten) - cr_tba_rechn ist der CompositeReport So weit, so gut. Der Report wird auch tatsächlich [z]-mal zum CompRep hinzugefügt, allerdings immer nur mit den Werten der letzten Abfrage gefüllt. (falls jemand versteht, was ich meine ;) ) Warum??? Vielleicht kann ja jemand helfen... MfG Martoeng |
Re: Quickreport: der gleiche Report mehrmals im Composite-Re
So, habs nu mit sehr viel Rumprobieren geschafft:
Das Problem ist ganz einfach, dass diese OnAddReports-Funktion nur ein einziges mal aufgerufen wird, die einzelnen Reporte aber erst _nach_ dem Durchlauf dieser Funktion wirklich hinzugefügt werden. Da ist es kein Wunder, wenn die Datasource immer die "letzte" ist... :? Also habe ich das alles ein bisschen verlagert... Falls irgendjemand inder grossen Welt auch mal das Problem haben sollte, hier meine Lösung: In der OnAddReports-Funktion wird der Report jetzt nur noch [z]-mal hinzugefügt, ohne Einfluss auf die Datasource zu nehmen.
Delphi-Quellcode:
Die Variable aus dem Memo wird im OnFinished-Ereignis des CompositeReports "vergeben":
for z := 0 to m_liste.Lines.Count-1 do
begin cr_tba_rechn.Reports.Add(frm_tba_rechn.quickrep2); end;
Delphi-Quellcode:
Die Datasource wird nun im BeforePrint-Ereignis des Quickrep2 mittels der "t_vorgang" zusammengesetzt.
procedure Tfrm_tba_rechn_setzen.cr_tba_rechnFinished(Sender: TObject);
begin if z_global <= m_liste.Lines.Count-1 then begin unit21.t_vorgang := m_liste.Lines.Strings[z_global]; //showmessage(inttostr(z_global) + ' - ' + m_liste.Lines.Strings[z_global]); z_global := z_global + 1; end; end; So jetzt werd ich zur Feier des Tages erstmal :drunken:'en gehn ;) Nee, nich wirklich.... MfG martoeng |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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 by Thomas Breitkreuz