Autor Beitrag
Martoeng
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 25



BeitragVerfasst: Do 04.11.04 09:08 
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):

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 25



BeitragVerfasst: 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.

ausblenden 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":

ausblenden 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]; 
    //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.


MfG

martoeng