![]() |
Datenbank: Interbase • Version: 4 • Zugriff über: IBQuery
Fastreport mit Master und mehreren Detailbändern
Guten Tag Delphianer,
ich habe die Artikel die dies Thema behandeln gelesen. Sie helfen aber nicht weiter oder ich sehe mal wieder den Wald vor lauter Bäumen nicht. Folgendes möchte ich lösen: Ich habe ein Report mit einem Masterband und 2 Detailbänder. In der Dokumentation von Fastreport steht, das man die Tabellen mit dem Felddesigner über die Masterfelder verbinden soll. Fastreport benutzt dazu 2 Tablekomponenten. Ich selektiere aber die mit Hilfe von IBQuery-Komponenten. Ist ja schliesslich eine Interbase-Datenbank. Wie soll ich nun diese mit einander verbinden?? Es gibt meines Wissens nach für diese Komponenten keinen Feldverbinder. Oder? Auf dem Formular befinden sich: die IBQuerykomponenten a) ibqrAdressen b) ibqrAemter c) ibqrEhrungen und die FRXDBDataset-Komponenten c) frxdbdtstAdressen (Dataset = ibqrAdressen) d) frxdbdtstAemter (Dataset = ibqrAemter) e) frxdbdtstEhrungen (Dataset = ibqrEhrungen) Im Report gibt es die Bänder MasterData (Dataset = frxdbdtstAdressen) Detailband1 (Dataset = frxdbdtstAemter Detailband2 (Dataset = frxdbdtstEhrungen) ---------------------------------------------------------------------------- Versucht habe ich auch schon mit nur einer Abfrage die Daten zu selektieren. Die Daten wurden dann auch korrekt selektiert, aber trotzdem war das Problem beim Darstellen der Daten vorhanden. Da ja keine Deteilbänder angeben wurden. Dazu benutze ich diesen Code:
Delphi-Quellcode:
---------------------------------------------------------------------------------------------------
select
a.Titel, a.name1, a.name2, a.Strasse, a.PLZ, a.Ort, a.Geborenam, l.FKAdressID, l.von, l.bis, e.FKAdressID, e.Ehrung, e.EhrungAm from logenaemter l inner Join adressen a on (l.FKAdressID = a.ADRESSID) inner join Ehrungen e on (l.FKAdressID = e.FKAdressID) where a.adressid in (15,920,1,20,2,22,1009) Jetzt benutze ich drei Abfragen, weiß aber nicht wo ich die Master-Detail-Beziehungen setzen soll. Der Report wird nicht korrekt gedruckt, da die Master-Detailbeziehungen nicht richtig gesetzt sind. Wie setzt man aber in den IBQuery-Componenten die Beziehungen?? Oder muss ich gar andere Komponenten nehmen. Aber welche? Ich hoffe ich habe das Problem verständlich beschrieben. |
AW: Fastreport mit Master und mehreren Detailbändern
Hi,
wenn Du die Daten in einer Abfrage raus bekommst, dann kannst Du diese auch über die Group-Bänder darstellen (s. die Demos dazu) Wenn Du über Master-Detail gehen willst, dann musst du dafür sorgen, dass die Details auf den jeweiligen Master reagieren. WEnn die IBO keine Master-Detail Beziehungen über den Objektinspektor kennen, musst du das halt von Hand lösen: Master: Select <> from <>; Detail 1: Select <> Frm <> where ID = MasterID; Detail 2: Select <> from <> where ID = Detail1ID; und in den AfterScroll-Events von Master und Detail1 den jeweiligen nächsten Detail setzen (also in Master.AfterScroll wird Detail1 ID gesetzt und geöffnet, In Detail1.AfterScroll wird Detail2 gesetzt) Klar so weit? Grüße |
AW: Fastreport mit Master und mehreren Detailbändern
Eigentlich fehlt nur eine DataSource Komponente, mit der die MasterDetail-Beziehung zwischen der
Delphi-Quellcode:
und
ibqrAdressen
Delphi-Quellcode:
und
ibqrAemter
Delphi-Quellcode:
festgelegt wird.
ibqrEhrungen
Der Rest ist dann Spaziergang |
AW: Fastreport mit Master und mehreren Detailbändern
Zitat:
wie kann denn in der TDataSource eine Master-Detail-Beziehung hergestellt werden? Hast Du mal ein Beispiele - Bild?? (Privat an Sir Rufo: Es kann Dir ja keine PN geschickt werden. Da Du aber aus Stadthagen kommst, habe ich eine oder mehrere Fragen an Dich, die ich hier nicht öffentlich machen möchte. Vielleicht schickst Du mir eine Nachricht??) An Lemmy, hast Du nicht ein konkretes Beispiel? Kann auch ein Bild sein. So verstehe ich es noch nicht. Mit Gruß HPB |
AW: Fastreport mit Master und mehreren Detailbändern
Master:
SQL-Code:
Detail 1:
select
a.Titel, a.name1, a.name2, a.Strasse, a.PLZ, a.Ort, a.Geborenam from adressen a where a.adressid in (15,920,1,20,2,22,1009);
SQL-Code:
Detail 2:
select
l.FKAdressID, l.von, l.bis from logenaemter l where l.FKAdressID = :master;
Code:
Im AfterScroll des Masterdatasets dann:
select
e.FKAdressID, e.Ehrung, e.EhrungAm from Ehrungen e where e.FKAdressID = :master;
Delphi-Quellcode:
frxdbdtstAemter.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value;
frxdbdtstAemter.Refresh; frxdbdtstEhrungen.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value; frxdbdtstEhrungen.Refresh; |
AW: Fastreport mit Master und mehreren Detailbändern
Master:
SQL-Code:
Detail:
select
a.AdressId, a.Titel, a.name1, a.name2, a.Strasse, a.PLZ, a.Ort, a.Geborenam from adressen a where a.adressid in (15,920,1,20,2,22,1009);
SQL-Code:
und das Verknüpfen der Abfragen:
select
l.FKAdressID, l.von, l.bis from logenaemter l where l.FKAdressID = :AdressID;
Delphi-Quellcode:
Wenn es keine
AdresseDataSource.DataSet := ibqrAdressen;
ibqrAemter.MasterSource := AdressenDataSource;
Delphi-Quellcode:
-Eigenschaft gibt, dann die Variante von mkinzler
MasterSource
Bei der Verwendung der
Delphi-Quellcode:
-Eigenschaft werden die Parameter automatisch mit den Werten vom Master bestückt
MasterSource
|
AW: Fastreport mit Master und mehreren Detailbändern
Zitat:
Kannst Du nicht mal eine Demo machen?? An Sir Rufo: Es gibt keine MasterSource.Eigenschaft bei TIBQuery-Komponenten. Mit Gruß HPB |
AW: Fastreport mit Master und mehreren Detailbändern
Ich schrieb auch Master DataSet
|
AW: Fastreport mit Master und mehreren Detailbändern
Zitat:
Im frxdbdataset. Jawoll dort gibt es ein "AfterScroll.Ereignis" Vielen Dank für Deine geduldige Hilfe. Mit Gruß HPB |
AW: Fastreport mit Master und mehreren Detailbändern
Guten Tag mkinzler,
auch auf die gefahrhin zu nerven. Ich habe es nun sogemacht wie Du es vorgeschlagen hast. Aber nun bekomme ich die Fehlermeldung: "ibqryBrdDaten: Das Feld Adressid wurde nicht gefunden" Auch wenn ich "adressis durch a.adressid" ersetze wird die Fehlermeldung ausgegeben. ibqryBrdDaten ist eine TIBQuery-Komponente.
Code:
Da die "TfrxDBDataset-Komponente" kein .ParamByName kennt habe ich im
frxdbdtstAemter.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value;
frxdbdtstAemter.Refresh; frxdbdtstEhrungen.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value; frxdbdtstEhrungen.Refresh; AfterScrollEreignis des Master-Datasets folgendes
Delphi-Quellcode:
Kann hier der Fehler liegen. Ich verzweifle bald. Ich verstehe einfach nicht was da los ist.
ibqryBrdAemter.ParamByName('master').Value :=
ibqryBrdDaten.FieldByName('a.AdressID').Value; ibqryBrdAemter.Refresh; Vielleicht magst Du noch mal helfen. Mit Gruß HPB |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 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