![]() |
Delphi-Version: XE
QuickReport, NeedData ohne DB-Anbindung
Hallo zusammen,
ich habe ein größeren Report der immer wieder Probleme macht. In dem Report gab es ein MischMasch aus DB-gebundenen Bändern und solchen, die per OnNeddData ihre Daten aus einer Klassenstruktur holen. Sowohl bei DB als auch bei der Klasse wurden die Daten per BeforePrint in die TQRLabel geschrieben. Ich habe den Report jetzt so umgestellt, dass er eigentlich ganz ohne DB-Anbindung auskommen soll. Jetzt habe ich aber das Problem, dass einige Bänder, die schon früher nicht DB-sensitiv waren, gar nicht mehr gedruckt werden. Der Grundaufbau des Reports ist
Code:
Insgesamt sind es 35 Bandgruppen
LinkBand FooterBand HeaderBand ParentBand OnNeedData
qrba01h TQRBand.rbPageHeader qrba02h TQRBand.rbTitle arba03h TQRBand.rbGroupHeader qrba03m qrba03d TQrSubDetail qrba03m qrba03f qrba03h Yes qrba03f TQRBand.GroupFooter qrba03m qrba03m TQRChildBand arba03f qrba04h TQRChildBand arba03m arba04m TQRChildBand arba04h arba05h TQRBand.rbGroupHeader qrba05d TQrSubDetail qrba05m qrba05f qrba05h Yes qrba05f TQRBand.GroupFooter qrba05m TQRChildBand arba19f Die einzelnen Bandgruppen können per Configuration Enabled oder Disabled werden In meinem Fall ist die Gruppe qrba03 disabled Die Gruppe qrba04 sollte angezeigt werden, wird es aber nicht. Breakpoint in qrba04h.Beforeprint wird nicht angesprungen. Auch nicht in qrba04m Ich hätte gesagt es liegt daran, dass qrba04h als Childband unter qrba03 hängt, aber das war schon immer so und vorher, als einige qrba00d noch mit einer Tabellen verknüpft waren, wurde arba04 korrekt gedruckt. Ich habe qrba04h.TQRChildBand mal in TQRBand.rbGroupheader geändert. Danach flog das ganz Band irgendwo ans Ende des Report Und es gibt auch sonst noch TQRChildBänder die z.B. nur ein Chart enthalten. Einer wird gedruckt der direkt darauffolgende nicht (oder anders rum). Ich habe die Eigenschaften der Bänder per NotePad++ verglichen um wirklich alle Settings zu sehen. Die sind identisch. Ein Ding war z.B., dass anfangs auch die genau gleich aufgebauten Datenlisten
teilweise gedruckt wurden und andere nicht. Es waren immer dieselben die gedruckt wurden oder nicht Ich habe bei allen in der Textansicht des Forms Master = qrReport gelöscht Der wurde beim Neuladen wieder automatisch überall rein geschriebn. Seitdem drucke aber alle Bandgruppen mit Daten Ib qrba00d.Beforeprint werden immer die Daten in die Textfelder geschrieben und der Zeiger auf den nächsten Datensatz gesetzt In qrba00d.NeedData wird MoreData = False gesetzt wenn keine Daten mehr da Hat jemand ein Tip, was ich probieren könnte Vielen Dank Gerd |
AW: QuickReport, NeedData ohne DB-Anbindung
Zitat:
|
AW: QuickReport, NeedData ohne DB-Anbindung
Zitat:
Wenn alles korrekt läuft, erfolgt der Ablauf wie folgt
Code:
Problem 1: (gelöst)
qrbad.NeedData // Aufruf des NeedData des DATEN-Bandes
qrbah.BeforePrint // Aufruf des BeforePrint des HEADER-Bandes qrbad.NeedData // Aufruf des NeedData des DATEN-Bandes, so lange bis MoreData = False gesetzt wird qrbad.BeforePrint // Aufruf des BeforePrint des DATEN-Bandes, so lange MoreData = True gesetzt wurde Bevor ich Master = qrReport überall gelöscht habe, gab es Bandgruppen, da wurde qrbad.NeedData angesprungen, MoreData = True gesetzt, aber weder qrbah.BeforePrintnie noch qrbad.BeforePrint angesprungen. Obwohl True, wurde direkt auf die nächste Band-Gruppe weiter gesprungen. Problem 2: Die Gruppen, die nur aus zwei TQRChildBand bestehen (in meinem Beispiel qrba04), werden mal gedruckt mal nicht. Ich bin jetzt aber so weit gekommen, dass es wohl damit zusammen hängt, ob die vorige Gruppe gedruckt wurde. Es war einiges an Aufwand, da QuickReport sich so schwer tut, Bänder nachträglich zu verschieben oder einzufügen, aber ich habe jetzt alle Gruppen so eingefügt, dass sie immer aus
Code:
bestehen. Damit kann ich jede Gruppe für sich über qrba05d.NeedData einblenden oder eben nicht
arba00h TQRBand.rbGroupHeader
qrba00d TQrSubDetail qrba00f TQRBand.GroupFooter qrba00m TQRChildBand Die Lösung war, dass ich in NotePad++ direkt im DFM-File
Danach habe ich die neuen Bänder auch im PAS-File angelegt. Und nach Neustart des Projektes sind die Positionen tatsächlich alle da, wo sie sein sollten. Incl. der neuen Bandgruppen, in die jetzt die alten TQRChild-Daten rein kommen Das Problem ist also gelöst. Jetzt muss ich noch die Logik incl. Befüllung der Datenfelder umstellen, aber das Schlimmste ist erledigt. Und mit OnNeedData für jede Band-Gruppe bin ich jetzt zuversichtlich, dass ich die Kontrolle über die Bänder habe. Trotzdem bin ich wieder stark am Überlegen, auf FastReport zu wechseln. Auch wenn dieses Projekt EndOfLife ist. Wir werden trotzdem noch jahrelang Service leisten müssen |
AW: QuickReport, NeedData ohne DB-Anbindung
Noch eine Erkenntnis:
Wenn Band.Enabled = False, wird Band.OnNeedData trotzdem aufgerufen. Wenn Wechsel in den Daten und damit blättern auf EOF in OnBeforePrint liegt, wird OnBeforePrint nie aufgerufen und NeedData bleibt in Dauerschleife da EOF nie erreicht wird |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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-2025 by Thomas Breitkreuz