Delphi-PRAXiS
Seite 3 von 5     123 45      

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)

EarlyBird 4. Dez 2014 07:55

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Liste der Anhänge anzeigen (Anzahl: 2)
du kannst es auch einfach mit einem Script im Report machen
In den Report ein Masterband und ein Detailband einfügen
Masterband Deinem Dataset zuordnen.
Detailband nicht zugeordnet Anzahldatensätze auf 1 stellen
Siehe Screenshot1
Das Ergebnis siehe Screenshot2

Delphi-Quellcode:
var
 LastMeldergruppe : integer;                                            
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin  
  //leere Zeile ausblenden                    
  MasterData1.visible := False;
  if (LastMeldergruppe) <> <frxDBDataset1."Meldergruppe"> then
    begin                        
     //leere Zeile anzeigen                                                  
     MasterData1.visible := True;
    end;
  LastMeldergruppe := <frxDBDataset1."Meldergruppe"> + 1;                                      
end;

procedure frxrprt1OnStartReport(Sender: TfrxComponent);
begin
    MasterData1.DataSet.First;                                        
    LastMeldergruppe := <frxDBDataset1."Meldergruppe">;
end;

Dejan Vu 4. Dez 2014 08:03

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Die Routine sollte doppelte Nullspalten entfernen (getippt und nicht getestet). D.h. Du liest die Query ein, jagst das DS durch die Methode und druckst anschließend aus.

Delphi-Quellcode:
Procedure RemoveDuplicateNUllRows (aDataSet : TDataSet; aFieldNameToCheckForNull : String);
var
  prevLineWasNull : Boolean;

Begin
  aDataSet.Last;
  While not aDataSet.Bof do begin
    if VarIsNull(aDataSet[aFieldNameToCheckForNull]) then begin
      if prevLineWasNull then
        aDataSet.Delete;

      prevLineWasNull := Not prevLineWasNul;
    end
    else prevLineWasNull := false;
    aDataSet.Prior
  end
end;
Du gehst von hinten nach vorne durch und löschst eine leere Zeile, wenn die zuvor besuchte (also, die darunter) auch schon leer war.

Jens Hartmann 4. Dez 2014 20:00

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
So, jetzt Doktor ich hier schon wieder etwas länger rum

Zitat:

Zitat von Sir Rufo
SQL-Code:
select
  Value,
  Meldergruppe,
  Adresse,
  Etage,
  Meldebereich
from
  ValueTable
left join MelderGruppen
  on Meldergruppe = Value
where
  Value <= Max( Meldergruppe ) -- << könnte auch ein SubSelect benötigen!
order by
  Value
 
Value Meldegruppe
1 1
2 2
3 NULL
4 NULL
5 NULL
6 NULL
7 7

Ich frage mich dir ganze Zeit, wie Du die NULL in das Ergebnis bekommst. Ich habe das jetzt mehrfach versucht und in verschiedenen Varianten. Aber nie werden die NULL Spalten angezeigt.

Nach genauer Prüfung, kann das ja auch nicht gehen...
SQL-Code:
from
  ValueTable
left join MelderGruppen
  on Meldergruppe = Value
Im Left Join, wird ja abgefragt, ob der Wert Meldergruppe = Value ist

->

Meldergruppe(1) = Value(1) = true
Meldergruppe(?) = Value(2) = false

DeddyH 4. Dez 2014 20:13

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Ein Left Join ist ein Outer Join, d.h. dass wenn es in der "rechten" Tabelle keine Entsprechungen gibt, werden deren Felder genullt.

himitsu 4. Dez 2014 20:13

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Ohne etwas am Report zu ändern und nur um nochmal das genannte zusammenzufasse, bzw. zu erweitern.

leere Dummy-Datensätze einfügen, für die fehlenden Datensätze
k.A. warum man den Report extra wild verbiegen will.

* entweder aus einem Generator an das Select dranUNIONen (nur die Indize, welche fehlen)
* oder eine Sequenz/Dummytabelle 1 bis 256 (bzw. bis 255) erzeugen und dort die existierenden Daten anJOINen (siehe mein Vorredner)

Jens Hartmann 4. Dez 2014 20:23

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DeddyH
Ein Left Join ist ein Outer Join, d.h. dass wenn es in der "rechten" Tabelle keine Entsprechungen gibt, werden deren Felder genullt.

Ich weiß, nur irgendwas geht halt nicht... Folgend mal die Abfrage...

SQL-Code:
SELECT ZahlerEMA.MG, MGV_EMA.Meldergruppe FROM ZahlerEMA left join MGV_EMA on MGV_EMA.Meldergruppe = ZahlerEMA.MG WHERE Anlagennummer = 325 ORDER BY ZahlerEMA.MG

Und was bitte ist dann daran falsch. Das Ergebnis der Abfrage liegt im Anhang

himitsu 4. Dez 2014 20:29

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Sicher, daß in MGV_EMA diese Datensätze wirklich nicht drin sind? :stupid:

Jens Hartmann 4. Dez 2014 20:33

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von himitsu
Sicher, daß in MGV_EMA diese Datensätze wirklich nicht drin sind?

SQL-Code:
SELECT Meldergruppe FROM MGV_EMA WHERE Anlagennummer = 325 ORDER BY Meldergruppe
Ich denke schon... Siege Abfrage und Anhang

himitsu 4. Dez 2014 20:36

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Ups, falsch geguckt. :oops:

Und wie sieht ZahlerEMA aus?

Jens Hartmann 4. Dez 2014 20:38

AW: Fast Report - Leerzeile einfügen bei fehlendem Datensatz
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wie vorgesehen


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:35 Uhr.
Seite 3 von 5     123 45      

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