Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Quickreport: der gleiche Report mehrmals im Composite-Report (https://www.delphipraxis.net/33221-quickreport-der-gleiche-report-mehrmals-im-composite-report.html)

Martoeng 3. Nov 2004 15:26


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:
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;
zur Erklärung:
- 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

Martoeng 4. Nov 2004 07:40

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:
  for z := 0 to m_liste.Lines.Count-1 do
  begin
     cr_tba_rechn.Reports.Add(frm_tba_rechn.quickrep2);
  end;
Die Variable aus dem Memo wird im OnFinished-Ereignis des CompositeReports "vergeben":
Delphi-Quellcode:
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;
Die Datasource wird nun im BeforePrint-Ereignis des Quickrep2 mittels der "t_vorgang" zusammengesetzt.

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 02:33 Uhr.

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