Martoeng - Do 04.11.04 09:08
Titel: den gleichen Quickreport mehrmals in CompositeReport einfüge
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-Quelltext
1: 2: 3: 4: 5: 6: 7:
| 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 Ergebnissen der letzten Abfrage gefüllt. (falls jemand versteht, was ich meine )
Warum???
Vielleicht kann ja jemand helfen...
MfG
Martoeng
Martoeng - Do 04.11.04 09:44
Hat sich schon erledigt.
Trotzdem danke für den sicherlich vorhanden guten Willen, mir zu helfen :lol:
Meine Lösung für die, die es interessiert:
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...
In der OnAddReports-Funktion wird der Report jetzt nur noch [z]-mal hinzugefügt, ohne Einfluss auf die Datasource zu nehmen.
Delphi-Quelltext
1: 2: 3: 4:
| 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-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| 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]; z_global := z_global + 1; end; end; |
Die Datasource wird nun im BeforePrint-Ereignis des Quickrep2 mittels der "t_vorgang" zusammengesetzt.
MfG
martoeng