Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   In Fastreport Null-Werte ausgeben (https://www.delphipraxis.net/189282-fastreport-null-werte-ausgeben.html)

HPB 25. Mai 2016 07:19

In Fastreport Null-Werte ausgeben
 
Guten Tag Delphianer,
ich möchte in Fastreport den Wert einer DB-Spalte auf NULL prüfen.

Folgender Quellcode funktioniert:
Das Feld "AUFGENOMMENAM" ist ein Date-Feld.

Delphi-Quellcode:
  if FormatDateTime('yyyy', <frxDBBrdDaten."AUFGENOMMENAM">) <> '1899' then
  begin            
  Memo31.Text := 'Aufgenommen am: ' + FormatDateTime('dd.mm.yyyy' <frxDBBrdDaten."AUFGENOMMENAM">);                                                        
  end          
  else
   Memo31.Text := 'Aufgenommen: - unbekannt';
Wie kann ich nun aber abfragen ob der Wert NULL ist?

Delphi-Quellcode:
if <frxDBBrdDaten."AUFGENOMMENAM">) IS NULL
liefert einen Fehler.

Mit Gruß HPB

Devil1925 25. Mai 2016 08:00

AW: In Fastreport Null-Werte ausgeben
 
Versuch es dochmal mit
Delphi-Quellcode:
if frxDBBrdDaten.FieldByName('AUFGENOMMEN').AsString = '' then
Begin
 // Mach was
End;
Alternativ kannst du auch einfach im SQL was machen...
wie wäre es mit
Code:
Select *, Case when AUFGENOMMEN is null then 1 else 0 as istLeer from Tabelle
und dann Prüfst du auf den Wert von Spalte istLeer ob diese 1 oder 0 ist.

HPB 25. Mai 2016 08:37

AW: In Fastreport Null-Werte ausgeben
 
Zitat:

Zitat von Devil1925 (Beitrag 1338889)
Versuch es dochmal mit
Delphi-Quellcode:
if frxDBBrdDaten.FieldByName('AUFGENOMMEN').AsString = '' then
Begin
 // Mach was
End;
Alternativ kannst du auch einfach im SQL was machen...
wie wäre es mit
Code:
Select *, Case when AUFGENOMMEN is null then 1 else 0 as istLeer from Tabelle
und dann Prüfst du auf den Wert von Spalte istLeer ob diese 1 oder 0 ist.

Vielen Dank für Deine Antwort.

Select und Case gehen nicht, da dies Feld Teil einer größeren Abfrage, die über
mehre Tabellen geht, ist.
Aber es muß doch möglich sein, in Fastreport das Feld auf den Wert NULL zu prüfen.
Wenn im Datumfeld kein Wert steht, dann gibt Fastreport immr '30.12.1899' zurück.
Vielleicht weis ja noch jemand eine Lösung.
Mit freundlichem Gruß HPB

madas 25. Mai 2016 08:47

AW: In Fastreport Null-Werte ausgeben
 
Oder eine User-Function basteln, die das Ganze übernimmt.

Delphi-Quellcode:
type
  THackfrxCustomDBDataSet = class(TfrxDataSet)
  private
    FFields: TStringList;
  end;

function TFormValidierung.IsDBFieldNull(index: Integer): Boolean;
begin
  Result := TField(THackfrxCustomDBDataSet(frxDBDatasetAuftrag).FFields.Objects[index]).IsNull;
end;

...

  frxReport.AddFunction('function IsDBFieldNull(index: Integer): Boolean', 'User Function','');

...

function TForm.frxReportUserFunction(const MethodName: String; var Params: Variant): Variant;
begin
  inherited;
  Result := -1;
  if (MethodName = 'ISDBFIELDNULL') then
  begin
    Result := IsDBFieldNull(Integer(Params[0]));
  end;
end;

...

MrSpock 25. Mai 2016 09:08

AW: In Fastreport Null-Werte ausgeben
 
Zitat:

Zitat von HPB (Beitrag 1338892)
Aber es muß doch möglich sein, in Fastreport das Feld auf den Wert NULL zu prüfen.
Wenn im Datumfeld kein Wert steht, dann gibt Fastreport immr '30.12.1899' zurück.
Vielleicht weis ja noch jemand eine Lösung.
Mit freundlichem Gruß HPB

Jap.

Code:
if <Table1."Field1"> = Null
heißt die Abfrage in FR.

HPB 25. Mai 2016 09:50

AW: In Fastreport Null-Werte ausgeben
 
Jap.

Code:
if <Table1."Field1"> = Null
heißt die Abfrage in FR.[/QUOTE]

Guten Tag MrSpock,
die Abfrage wirft keinen Fehler.
Trotzdem erkennt FR nicht, das in der DP-Spalte kein Wert steht.
Ich habe nachgeschaut, der Wert der Spalte ist mit NULL gekennzeichnet.
Kann es sein das FR hier einen Fehle hat?
Mit Gruß HPB

madas 25. Mai 2016 10:13

AW: In Fastreport Null-Werte ausgeben
 
Zitat:

Zitat von MrSpock (Beitrag 1338898)
Zitat:

Zitat von HPB (Beitrag 1338892)
Aber es muß doch möglich sein, in Fastreport das Feld auf den Wert NULL zu prüfen.
Wenn im Datumfeld kein Wert steht, dann gibt Fastreport immr '30.12.1899' zurück.
Vielleicht weis ja noch jemand eine Lösung.
Mit freundlichem Gruß HPB

Jap.

Code:
if <Table1."Field1"> = Null
heißt die Abfrage in FR.

Null mit nil erstezen, dann funzt es. ;)

HPB 25. Mai 2016 10:22

AW: In Fastreport Null-Werte ausgeben
 
Vielen Dank an alle für die rasche Hilfe.
Mit "NIL" klappt es wirklich.
Ein erfolgreicher Tag. Wieder etwas dazu gelernt.
Mit gruß HPB

MrSpock 25. Mai 2016 11:11

AW: In Fastreport Null-Werte ausgeben
 
Wenn es mit Nil klappt, ist alles gut. Ich kann es von hier gerade nicht testen.

Laut Manual zur FR Version 4.6 im Kapitel 6.6 müsste es NULL und nicht NIL sein. Dann ist entweder die Dokumentation falsch oder nicht zutreffend für die aktuelle Version. Ich nutze das in meinen Reports auch, habe aber wie gesagt im Moment keinen Zugriff darauf.

himitsu 25. Mai 2016 11:59

AW: In Fastreport Null-Werte ausgeben
 
Wir hatten vor Kurzem das selbe Problem und bei uns ging =NULL auch nicht und sowas wie VarIsNull gab es wohl nicht.

FastReport 4.10


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
Seite 1 von 2  1 2      

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