Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Fastreport mit Master und mehreren Detailbändern (https://www.delphipraxis.net/188097-fastreport-mit-master-und-mehreren-detailbaendern.html)

HPB 31. Jan 2016 10:59

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.

Lemmy 31. Jan 2016 11:08

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

Sir Rufo 31. Jan 2016 11:27

AW: Fastreport mit Master und mehreren Detailbändern
 
Eigentlich fehlt nur eine DataSource Komponente, mit der die MasterDetail-Beziehung zwischen der
Delphi-Quellcode:
ibqrAdressen
und
Delphi-Quellcode:
ibqrAemter
und
Delphi-Quellcode:
ibqrEhrungen
festgelegt wird.

Der Rest ist dann Spaziergang

HPB 31. Jan 2016 12:07

AW: Fastreport mit Master und mehreren Detailbändern
 
Zitat:

Zitat von Sir Rufo (Beitrag 1328850)
Eigentlich fehlt nur eine DataSource Komponente, mit der die MasterDetail-Beziehung zwischen der
Delphi-Quellcode:
ibqrAdressen
und
Delphi-Quellcode:
ibqrAemter
und
Delphi-Quellcode:
ibqrEhrungen
festgelegt wird.

Der Rest ist dann Spaziergang

Guten Tag Sir Rufo,
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

mkinzler 31. Jan 2016 12:28

AW: Fastreport mit Master und mehreren Detailbändern
 
Master:

SQL-Code:
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);
Detail 1:

SQL-Code:
select
  l.FKAdressID,
  l.von,
  l.bis
from
  logenaemter l
where
  l.FKAdressID = :master;
Detail 2:

Code:
select
  e.FKAdressID,
  e.Ehrung,
  e.EhrungAm
from
  Ehrungen e
where
  e.FKAdressID = :master;
Im AfterScroll des Masterdatasets dann:

Delphi-Quellcode:
frxdbdtstAemter.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value;
frxdbdtstAemter.Refresh;
frxdbdtstEhrungen.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value;
frxdbdtstEhrungen.Refresh;

Sir Rufo 31. Jan 2016 12:34

AW: Fastreport mit Master und mehreren Detailbändern
 
Master:
SQL-Code:
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);
Detail:
SQL-Code:
select
  l.FKAdressID,
  l.von,
  l.bis
from
  logenaemter l
where
  l.FKAdressID = :AdressID;
und das Verknüpfen der Abfragen:
Delphi-Quellcode:
AdresseDataSource.DataSet := ibqrAdressen;
ibqrAemter.MasterSource := AdressenDataSource;
Wenn es keine
Delphi-Quellcode:
MasterSource
-Eigenschaft gibt, dann die Variante von mkinzler

Bei der Verwendung der
Delphi-Quellcode:
MasterSource
-Eigenschaft werden die Parameter automatisch mit den Werten vom Master bestückt

HPB 31. Jan 2016 15:22

AW: Fastreport mit Master und mehreren Detailbändern
 
Zitat:

Zitat von mkinzler (Beitrag 1328856)
Master:

Im AfterScroll des Masterdatasets dann:

Delphi-Quellcode:
frxdbdtstAemter.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value;
frxdbdtstAemter.Refresh;
frxdbdtstEhrungen.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value;
frxdbdtstEhrungen.Refresh;

Im Masterband und auch im DetailBand gibt es kein AfterScroll-Ereignis.
Kannst Du nicht mal eine Demo machen??

An Sir Rufo:
Es gibt keine MasterSource.Eigenschaft bei TIBQuery-Komponenten.

Mit Gruß HPB

mkinzler 31. Jan 2016 15:44

AW: Fastreport mit Master und mehreren Detailbändern
 
Ich schrieb auch Master DataSet

HPB 31. Jan 2016 15:59

AW: Fastreport mit Master und mehreren Detailbändern
 
Zitat:

Zitat von mkinzler (Beitrag 1328884)
Ich schrieb auch Master DataSet

Danke für den Rüffel.
Im frxdbdataset. Jawoll dort gibt es ein "AfterScroll.Ereignis"
Vielen Dank für Deine geduldige Hilfe.
Mit Gruß
HPB

HPB 1. Feb 2016 09:30

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:
frxdbdtstAemter.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value;
frxdbdtstAemter.Refresh;
frxdbdtstEhrungen.ParamByName('master').Value := frxdbdtstAdressen.FieldByName('AdressID').Value;
frxdbdtstEhrungen.Refresh;
Da die "TfrxDBDataset-Komponente" kein .ParamByName kennt habe ich im
AfterScrollEreignis des Master-Datasets folgendes
Delphi-Quellcode:
 ibqryBrdAemter.ParamByName('master').Value :=
  ibqryBrdDaten.FieldByName('a.AdressID').Value;
 ibqryBrdAemter.Refresh;
Kann hier der Fehler liegen. Ich verzweifle bald. Ich verstehe einfach nicht was da los ist.
Vielleicht magst Du noch mal helfen.
Mit Gruß HPB


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr.
Seite 1 von 2  1 2      

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