AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fastreport mit Master und mehreren Detailbändern

Fastreport mit Master und mehreren Detailbändern

Ein Thema von HPB · begonnen am 31. Jan 2016 · letzter Beitrag vom 1. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2   
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 11:59
Datenbank: Interbase • Version: 4 • Zugriff über: IBQuery
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.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 12:08
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 12:27
Eigentlich fehlt nur eine DataSource Komponente, mit der die MasterDetail-Beziehung zwischen der ibqrAdressen und ibqrAemter und ibqrEhrungen festgelegt wird.

Der Rest ist dann Spaziergang
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#4

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 13:07
Eigentlich fehlt nur eine DataSource Komponente, mit der die MasterDetail-Beziehung zwischen der ibqrAdressen und ibqrAemter und 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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 13:28
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;
Markus Kinzler

Geändert von mkinzler (31. Jan 2016 um 13:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 13:34
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 MasterSource -Eigenschaft gibt, dann die Variante von mkinzler

Bei der Verwendung der MasterSource -Eigenschaft werden die Parameter automatisch mit den Werten vom Master bestückt
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#7

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 16:22
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

Geändert von HPB (31. Jan 2016 um 16:33 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 16:44
Ich schrieb auch Master DataSet
Markus Kinzler
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#9

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 31. Jan 2016, 16:59
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
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#10

AW: Fastreport mit Master und mehreren Detailbändern

  Alt 1. Feb 2016, 10:30
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 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