Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen (https://www.delphipraxis.net/154648-quickreport-boolean-mit-ja-nein-statt-wahr-falsch-anzeigen.html)

Chaoten-Joe 19. Sep 2010 18:12

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen
 
Hallo zusammen,

hat jemand einen Tipp, wie ich in einem Quickreport in einer TQRDBText-Komponente boolesche Werte aus einer TQuery-Auswertung mit JA oder NEIN anzeigen kann (und nicht mit WAHR oder FALSCH)?
In meinem Programm kann der Benutzer beliebige SQL-Auswertungen vornehmen, die verschiedene Tabellen betreffen. Im DBGrid lasse ich die Suchergebnisse durch OnDrawColumnsCell entsprechend formatieren ... aber im Quickreport will es nicht gelingen.
Leider kann ich die Eigenschaft DisplayValues ja nicht ansprechen, oder? Ich bekomme es einfach nicht hin ... :wall:

Vielen Dank schonmal im voraus!

Christian

mkinzler 19. Sep 2010 18:18

AW: Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen
 
Notfalls in der Abfrage:
SQL-Code:
select ... case when <Wert> = True then 'ja' else 'Nein' end ...

Chaoten-Joe 19. Sep 2010 18:23

AW: Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen
 
Gibt es auch ne andere Möglichkeit?
Ich möchte, dass es nicht der Benutzer eingeben muss ... Es soll halt so einfach wie möglich sein.

Sir Rufo 19. Sep 2010 18:39

AW: Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen
 
Ja, verwende ein Datenbanksystem und erstelle dort eine entsprechende StoredProcedure.

Code:
SELECT ..., JaNein( Wert ), ...
Eine andere Möglichkeit wäre, das Resultset auf Boolean-Werte zu prüfen und dann diese Spalten ausblenden und dafür "berechnete" Spalten einzufügen.

sx2008 19. Sep 2010 19:49

AW: Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen
 
Die einfachste Möglichkeit läuft über das OnGetText-Event.
Wenn man es richtig macht, kann man ALLE Boolean-Felder so umstellen.
(einmal programmieren, so oft wie gebraucht verwenden)
Jedes Feld hat ein OnGetText-Event über das man den Text, den ein Feld liefert
beliebig verändern kann:
Delphi-Quellcode:
procedure TForm1.BooleanJaNeinGetText(Sender: TField; var Text: string; DisplayText: Boolean);
const JaNein : array[Boolean] of string = ('Nein', 'Ja');
begin
  Text := JaNein[Sender.AsBoolean];
end;
Jetzt muss man noch dafür sorgen, dass dieser Eventhandler von den Felder auch benützt wird:
Delphi-Quellcode:
procedure TForm1.SetupJaNeinEventHandler(fields:TFields);
ver
  i : Integer;
  f : TField;
begin
  for i:= 0 to fields.Count-1 do
  begin
    f := fields[i];
    if f.FieldType=ftBoolean then
      f.OnGetEvent := self.BooleanJaNeinGetText;
  end;
end;
Wenn man diese Mehode im Event AfterOpen aufruft
Delphi-Quellcode:
procedure TForm1.Query1AfterOpen(dataset.TDataset);
begin
  SetupJaNeinEventHandler(dataset.Fields);
end;
dann ist man fertig.
(Code ohne Hilfe einer Delphi IDE erstellt; kleine Syntaxfehler sind moglich)

Chaoten-Joe 19. Sep 2010 21:49

AW: Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen
 
Perfekt! Eigentlich auch logisch! Dickes Dankeschön!

Nur der Vollständigkeit halber ... für alle, die das gleiche Problem hatten:
Eine kleine Korrektur beim Eventhandler:
Delphi-Quellcode:
procedure TForm1.SetupJaNeinEventHandler(fields:TFields);
var
  i : Integer;
  f : TField;
begin
  for i:= 0 to fields.Count-1 do
  begin
    f := fields[i];
    if f.DataType=ftBoolean then
      f.OnGetText := self.BooleanJaNeinGetText;
  end;
end;
Problem gelöst! :thumb:

user0815 20. Sep 2010 08:48

AW: Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen
 
etwas OT...

Oder aber den QRDBText bei Font auf Wingdings einstellen & anschließend das OnPrint Event des Feldes auf

Delphi-Quellcode:
procedure TFormDruckenIBC.QRDBTextXXPrint(sender: TObject;
  var Value: String);
begin
  if Datenmodul.DBQuery.FieldByName('Feld').AsBoolean = True
   then Value := #254
    else Value := #168;
end;
ändern. Jetzt erhält man das Häkchen (http://de.wikipedia.org/wiki/Häkchen_(Schriftzeichen))

sx2008 27. Sep 2010 00:59

AW: Quickreport: Boolean mit Ja/Nein statt Wahr/Falsch anzeigen
 
Zitat:

Zitat von user0815 (Beitrag 1050708)
Oder aber den QRDBText bei Font auf Wingdings einstellen & anschließend das OnPrint Event des Feldes auf

Das ist auch ein schöner Lösungsweg.:thumb:
Wobei man versuchen sollte den Wert des Feldes über den Parameter Sender rauszuziehen:
Delphi-Quellcode:
procedure TFormDruckenIBC.QRDBTextXXPrint(sender: TObject; var Value: String);
var
  f : TField;
begin
  f := (Sender as TQRDBText).Dataset.FieldByName((Sender as TQRDBText).DataField);
  if (f.AsBoolean then
   then Value := #254
    else Value := #168;
end;


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-2025 by Thomas Breitkreuz