![]() |
Quickreport -> NeedData Problem
Huhu @ all :-)
Ich weiss: ihr seid alle clevere Jungs und könnt mir bestimmt helfen :-) Folgendes Problem: Ich habe einen Quickreport, der aus einer Liste von Objekten bestimmte Objekteigenschaften ausgeben soll. Dazu bediene ich mich im NeedData-Aufruf des Quickreports folgenden Codes:
Delphi-Quellcode:
sowie:
procedure TqrBeipiel.qrBeispielNeedData(Sender: TObject;
var MoreData: Boolean); var JumpNextDataSet: Boolean; begin JumpNextDataSet := TRUE; if (Counter < ObjektListe.Count) then begin While JumpNextDataSet do begin if (ObjektListe[Counter].gueltig) begin JumpNextDataSet := FALSE; MoreData := TRUE end else begin Counter := Counter + 1; JumpNextDataSet := TRUE; end end; end; end;
Delphi-Quellcode:
so *hüstel*, jetzt zum eigentlichen Probelem: Ist das letzte Objekt in der Liste nicht gültig, so überschreitet der Index der Liste das Maximum (... mit anderen worten: der letzte Datensatz wird, sofern er nicht gültig ist ebenfalls übersprungen). Weiss jemand von euch wie ich das ausbügeln kann? :gruebel:
procedure TqrBeipiel.QRDesignSummaryBandAfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean); begin Counter := Counter + 1; end; Vielen Dank schonmal, Christian |
Re: Quickreport -> NeedData Problem
Hi,
ich verstehe nicht warum du in SummaryAfterPrint den Counter hochzählst (würde ich nebenbei mit Inc(nCounter) machen). Needdata wird danach doch nicht wieder aufgerufen. Hast du daran gedacht den Counter im BeforePrint wieder auf 0 zu setzen ? Wo genau kommt der Abbruch ? Mfg. Frank |
Re: Quickreport -> NeedData Problem
Hi Sourcemember !
folgendes: wenn MoreData auf True steht und das DetailBand geschrieben wurde, dann wird der Counter incrementiert. Und: Es wird der nächste Datensatz aus NeedData ermittelt. (Der aktuelle Datensatz besteht im Wert von Counter - wird in BeforePrint mit Ausgabe(Counter) gemacht - das ist auch der Grund, warum Counter nicht wieder auf 0 gesetzt wird). Ich habe aber bereits eine Möglichkeit gefunden, das ganze zu lösen. Die Lösung empfinde ich jedoch als ziemlich unschön. Der ganze Lösungsweg ist nicht toll. Aber mir fällt keine andere Möglichkeit ein die einzelnen Datensätze zu ermitteln und nicht gültige auszuschließen. Prinzipiell möchte ich also einfach jedes gültige objekt der liste in mein detailband schreiben. Falls jemandem noch eine intelligentere Lösung einfällt wäre ich sehr dankbar, wenn er sie hier posten würde. Meine Lösung:
Delphi-Quellcode:
Danke für Deine Hilfe Sourcemember!
if (Counter < ObjektListe.Count) then
begin While JumpNextDataSet do begin if (ObjektListe[Counter].gueltig) then begin JumpNextDataSet := FALSE; MoreData := True; end else begin if (Counter = ObjektListe.Count-1) then begin JumpNextDataSet := FALSE; MoreData := False; Last := FALSE end else begin Counter := Counter + 1; JumpNextDataSet := TRUE; end; end end; |
Re: Quickreport -> NeedData Problem
Der Abbruch erfolgt durch MoreData := False :zwinker:
|
Re: Quickreport -> NeedData Problem
Hi Cristian,
was hältst du davon:
Delphi-Quellcode:
Mfg.
MoreData := Counter < ObjektListe.Count; //sicher stellen das MoreData richtig ist
if MoreData then begin While True do begin if (ObjektListe[Counter].gueltig) then break else begin if (Counter = ObjektListe.Count) then //sonst kommt der letzte Satz nicht begin MoreData := False; Last := False; break; //Edit: hatte ich vergessen end else inc(Counter); end; end; end; Frank P.S. Mit "wo der Abbruch ist ?" meinte ich den Fehler. |
Re: Quickreport -> NeedData Problem
Hi Frank !
Ich danke Dir für Deine Hilfe. Leider gibt es bei Deiner Variante wieder exakt denselben Fehler. Wenn das letzte Objekt ungültig ist, überschreitet der Index der Liste das Maximum. :roll: Sorry, Christian |
Re: Quickreport -> NeedData Problem
Hi Cristian,
hatte noch ein break vergessen (ist jetzt nachgetragen) aber sag mir doch bitte in welcher Quelltextzeile der Fehler kommt. Im NeedData oder später ? Zeig doch mal den gesamten Code. Mfg. Frank |
Re: Quickreport -> NeedData Problem
Das Break hat leider auch nix am Fehler geändert. :roteyes:
Er crasht in der Zeile:
Delphi-Quellcode:
if (ObjektListe[Counter].gueltig) then // <-- index der liste überschreitet max.
:wiejetzt: |
Re: Quickreport -> NeedData Problem
Verstehe ich nicht ! :wiejetzt:
Welchen Wert hat Counter und ObjectList.Count wenn es crasht ? Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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