Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fast Report - Leerzeile einfügen bei fehlendem Datensatz (https://www.delphipraxis.net/182998-fast-report-leerzeile-einfuegen-bei-fehlendem-datensatz.html)

Jens Hartmann 3. Dez 2014 07:45

Datenbank: Access • Version: 2007 • Zugriff über: ADO

Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Hallo zusammen,

ich erstelle mit FastReport einen Report, in dem eine Tabelle über eine MasterDataBand angezeigt weird. Funktioniert auch echt gut.

Die Tabelle die ich Anzeigen möchte, verfügt über einen Primärschlüssel, den ich nicht zur Anzeige bringen. Es gibt aber eine weiteres Feld, welches eine fortlaufende Nummerierung enthält (z.B. 1 - 100). Es kann vorkommen, das die Wert 1 - 5 enthalten sind, der Wert 6 fehlt und dann der Wert 7-22 wieder vorhanden ist.

Beispiel:

1 Feld(1) Feld(2) Feld(3)
2 Feld(1) Feld(2) Feld(3)
3 Feld(1) Feld(2) Feld(3)
4 Feld(1) Feld(2) Feld(3)
5 Feld(1) Feld(2) Feld(3)
7 Feld(1) Feld(2) Feld(3)
8 Feld(1) Feld(2) Feld(3)

Bei der Ausgabe kann man somit nicht auf einen Blick erkennen, das Zeile 6 noch zur Verfügung steht. Wie kann ich hier im Report eine Leerzeile generieren lassen.

So sollte es dann aussehen:

Beispiel:

1 Feld(1) Feld(2) Feld(3)
2 Feld(1) Feld(2) Feld(3)
3 Feld(1) Feld(2) Feld(3)
4 Feld(1) Feld(2) Feld(3)
5 Feld(1) Feld(2) Feld(3)

7 Feld(1) Feld(2) Feld(3)
8 Feld(1) Feld(2) Feld(3)

Vorab vielen Dank und Gruß Jens

Sir Rufo 3. Dez 2014 08:02

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Du musst diesen "leeren" Datensatz dem Report zur Verfügung stellen. Also einfach vor dem Report aktiv werden.

DeddyH 3. Dez 2014 08:06

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Nur eine Idee, und dafür müsstest Du im Report ein wenig programmieren: Definiere Dir eine lokale Variable für die fortlaufende Nummer. Bei jedem Datensatz schaust Du nun, ob dessen Nummer der gemerkten + 1 entspricht. Falls nicht, müsste die Höhe aller Komponenten der Zeile des Bandes verdoppelt und die Ausgabe am unteren Rand ausgerichtet werden. Falls doch, dann wieder auf Standard zurückstellen. Anschließend die Variable in jedem Fall mit der aktuellen Nummer belegen.

Jens Hartmann 3. Dez 2014 08:28

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Zitat:

Zitat von Sir Rufo
Du musst diesen "leeren" Datensatz dem Report zur Verfügung stellen. Also einfach vor dem Report aktiv werden.

Das geht leider nicht, da es diesen leeren Datensatz nicht gibt. Ich habe eine Tabelle, in der Störmeldungen eingetragen sind. Technisch kann man hier 512 Stück/pro Störmeldeanlage anlegen. Existieren diese nicht, werden diese in der DB auch nicht angelegt.

Zitat:

Zitat von DeddyH
Nur eine Idee, und dafür müsstest Du im Report ein wenig programmieren: Definiere Dir eine lokale Variable für die fortlaufende Nummer. Bei jedem Datensatz schaust Du nun, ob dessen Nummer der gemerkten + 1 entspricht. Falls nicht, müsste die Höhe aller Komponenten der Zeile des Bandes verdoppelt und die Ausgabe am unteren Rand ausgerichtet werden. Falls doch, dann wieder auf Standard zurückstellen. Anschließend die Variable in jedem Fall mit der aktuellen Nummer belegen.

Der Ansatz scheint mir logisch, aber doch sehr aufwendig. Eventuell sollte ich das DataSet für die Übergabe an den Report entsprechend erweitern.

Dejan Vu 3. Dez 2014 08:38

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Code:
select n.LaufendeNummer, d.* 
  from AlleNummern n
       left join MeineDaten d
         on n.LaufendeNummer = d.Nummer
  where n.LaufendeNummer between :Anfang and :Ende
So könnte man die Reportquelle erweitern, so daß Lücken entstehen. Ich persönlich bevorzuge die Variante, so wenig wie möglich Logik im Report selbst zu haben. Der ist für die Formatierung zuständig. Wobei...hmmm.. die Leerzeichen auch eine Formatierung sein könnten.

In jedem Fall ist imho o.g. Variante die einfachste.

@DeddyH: Bei deinem Lösungsansatz müsstest Du eventuell aus dem 'verdoppeln' ein 'ver-N-fachen' machen, denn wenn z.B. die Eintrage 6-123 fehlen, sind das dann u.U. mehr Lücken. Kommt aber drauf an.

Allgemein würde ich sagen:
Eine Lücke konstanter Größe, egal wie viele Nummern fehlen => DeddyH.
Für jede fehlende Nummer eine Lücke => vielleicht meine.

jobo 3. Dez 2014 08:48

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Der Ansatz von Dejan Vu scheint mir auch am sinnvollsten und kann notfalls auch so aufgeblasen werden, dass große Lücken wieder auf eine Zeile eingedampft werden.
Aus der Anforderung ist mir allerdings nicht klar, was "am Ende" der Liste geschehen soll, hier ist ja auch eine "Lücke" bis 512.
Davon abhängig müsste man sich überlegen, wie man "AlleNummern " aus dem Beispiel SQL befüllt bzw handhabt.

Jens Hartmann 3. Dez 2014 09:14

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Die Variante von Dujan Vu werden ich mal probieren. ich persönlich würde das auch gerne aus dem Report rauslassen und im Programm verarbeiten.

Ich benötige eigentlich egal wie groß die Lücke ist nur einen einzige Leerzeile. Sinn ist es nur auf einen Blick erkennen zu können, ob noch Reserve Meldungen vorhanden sind. Wie viele, spielt hier erstmal keine Rolle.

Gruß Jens

Sir Rufo 3. Dez 2014 09:19

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Meiner Meinung nach ist es schlecht den Report dafür derart zu verbiegen. Da ist es besser zwischen der Abfrage und dem Report diese Lücken, je nach Gusto, in die Datenmenge einzufügen. Dadurch ergibt sich der geringste Aufwand bei der Abfrage und der Report-Gestaltung.

jobo 3. Dez 2014 09:29

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Der Report wird ja mit eine geänderten Datenquelle nicht verbogen.
2 verschiedene Datenquellen (Views)
1 Report
Je nach Datenquelle zeigt er Lücken an oder nicht.

Sir Rufo 3. Dez 2014 09:43

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Zitat:

Zitat von jobo (Beitrag 1282065)
Der Report wird ja mit eine geänderten Datenquelle nicht verbogen.
2 verschiedene Datenquellen (Views)
1 Report
Je nach Datenquelle zeigt er Lücken an oder nicht.

Das ist doch genau das was ich sage "dem Report entsprechende Informationen liefern". Wie und wann und wieso ist egal, der Report bekommt einfach alle Informationen übermittelt.

Das Verbiegen bezog sich auf den Vorschlag von DeddyH, wo der Report umständlich dahingehend programmiert werden muss.

Das würde ich nur dann in Erwägung ziehen, wenn ich nur Zugriff auf den Report und nicht auf die Datenmenge habe. Das scheint hier aber nicht der Fall zu sein. Und eine andere View muss es nicht sein, geht aber logischerweise auch. Je nach Datenbank kann das von trivial bis schwierig sein. Darum wäre mein Favorit ein Vorbereiten der Datensätze in der Anwendung selber und diese dann dem Report zu übergeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.
Seite 1 von 5  1 23     Letzte »    

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