[Gelöst] DBEdit: 0 ausblenden

Rund um die LCL und andere Komponenten
Antworten
Ich934
Lazarusforum e. V.
Beiträge: 370
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

[Gelöst] DBEdit: 0 ausblenden

Beitrag von Ich934 »

Hallo,

vermutlich ist das, was ich hier mir denke, gar nicht möglich, trotzdem stelle ich es einmal hier ein: Ich zeige Daten aus einer SQLite-Datenbank in diversen Komponenten an. Unter anderen Werte in einem TDBEdit-Feld. Bei bestimmten Feldern möchte ich, wenn dieses "0" ist, dieses ausblenden.

Gibt es hier eine Idee, das zu realisieren? Eine Maske gibt es ja nicht für diese Komponente.

Vielen Dank.
Zuletzt geändert von Ich934 am Di 25. Apr 2023, 17:12, insgesamt 1-mal geändert.
Tipp für PostgreSQL: www.pg-forum.de

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: DBEdit: 0 ausblenden

Beitrag von theo »

Bei einem normalen TEdit geht das im OnChange.
Klappt das mit TDBEdit nicht?

Code: Alles auswählen

procedure TForm1.Edit1Change(Sender: TObject);
begin
   With Sender as TCustomEdit do
    if Text='0' then Hide else Show;
end;  

wp_xyz
Beiträge: 5189
Registriert: Fr 8. Apr 2011, 09:01

Re: DBEdit: 0 ausblenden

Beitrag von wp_xyz »

Ich934 hat geschrieben: So 23. Apr 2023, 17:53 Unter anderen Werte in einem TDBEdit-Feld. Bei bestimmten Feldern möchte ich, wenn dieses "0" ist, dieses ausblenden.
theo hat geschrieben: Mo 24. Apr 2023, 07:55

Code: Alles auswählen

procedure TForm1.Edit1Change(Sender: TObject);
begin
   With Sender as TCustomEdit do
    if Text='0' then Hide else Show;
end;  
Heißt "ausblenden" das DBEdit-Control auf Visible=false setzen? Aber wie soll dann der User den Wert ändern können, wenn er einmal "0" ist? Falls es nur um die Ausgabe geht, wäre ein DBLabel besser geeignet in so einem Zusammenhang.

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: DBEdit: 0 ausblenden

Beitrag von theo »

wp_xyz hat geschrieben: Mo 24. Apr 2023, 12:04 Heißt "ausblenden" das DBEdit-Control auf Visible=false setzen? Aber wie soll dann der User den Wert ändern können, wenn er einmal "0" ist? Falls es nur um die Ausgabe geht, wäre ein DBLabel besser geeignet in so einem Zusammenhang.
Ich nahm an, dass es es vorhandene Datensätze gibt, wo eine Änderung dieses Feldes nicht möglich sein soll.
Sonst verstehe ich es auch nicht.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: DBEdit: 0 ausblenden

Beitrag von af0815 »

theo hat geschrieben: Mo 24. Apr 2023, 12:19 Ich nahm an, dass es es vorhandene Datensätze gibt, wo eine Änderung dieses Feldes nicht möglich sein soll.
Ich glaube du liegst richtig, weil original war es ja folgende Frage
Ich zeige Daten aus einer SQLite-Datenbank in diversen Komponenten an.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Ich934
Lazarusforum e. V.
Beiträge: 370
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: DBEdit: 0 ausblenden

Beitrag von Ich934 »

Hallo,

also die Komponenten soll schon sichtbar sein, nur der Inhalt soll ausgeblendet werden. Also statt '0' soll hier ein '' angezeigt werden. Eine Eingabe/Änderung ist/soll nicht möglich sein. Sprich hier ist in diesem Fall nur eine Anzeige möglich. DBEdit wird rein aus Darstellungsstechnischen Gründen.

Schöne Grüße
Tipp für PostgreSQL: www.pg-forum.de

Ich934
Lazarusforum e. V.
Beiträge: 370
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: DBEdit: 0 ausblenden

Beitrag von Ich934 »

af0815 hat geschrieben: Mo 24. Apr 2023, 13:05 Ich glaube du liegst richtig, weil original war es ja folgende Frage
OK, dann nehme ich das Snippet von theo oben und leg einfach eine andere Komponente darüber. Trotzdem Danke.
Tipp für PostgreSQL: www.pg-forum.de

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: DBEdit: 0 ausblenden

Beitrag von theo »

Warum machst du nicht einfach "Enabled" auf false?
Das macht den Text grau und man kann nichts eingeben.

Ich934
Lazarusforum e. V.
Beiträge: 370
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: DBEdit: 0 ausblenden

Beitrag von Ich934 »

Weil die 0 optisch stört. Das ist einfach eine optische Sache.
Tipp für PostgreSQL: www.pg-forum.de

Soner
Beiträge: 734
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: DBEdit: 0 ausblenden

Beitrag von Soner »

Bei LibreOffice verwende ich dafür Zellenformat '#,##', aber das klappt mit Lazarus nicht, deshalb verwende ich bei Lazarus TField.OnGetText:

Code: Alles auswählen

procedure TForm1.FieldXYOnGetText(Sender: TField; var aText: string;  DisplayText: Boolean);
begin
  if (Sender.AsFloat=0) and DisplayText  then aText:=''
  else if DisplayText  then aText:=Sender.AsString //<- besser Format-Funktion benutzen 
  else aText:=Sender.AsString;
end;

wp_xyz
Beiträge: 5189
Registriert: Fr 8. Apr 2011, 09:01

Re: DBEdit: 0 ausblenden

Beitrag von wp_xyz »

Also ich verstehe das nicht: In der Zahl 0 steckt Information, die man nicht einfach weglassen kann. Oder ist das ein Platzhalter für "keine Eingabe"? Dann sollte in der Datenbank der Wert NULL stehen (nicht die Zahl 0), und damit sind die entsprechenden datensensitiven Controls bei diesen Feldern automatisch leer. Das ist ohnehin der Default, wenn bei Feldern keine Eingabe gemacht worden ist. Siehe beigefügtes Beispiel.
Dateianhänge
null_fields.zip
(2.86 KiB) 49-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: DBEdit: 0 ausblenden

Beitrag von af0815 »

wp_xyz hat geschrieben: Mo 24. Apr 2023, 23:09 Also ich verstehe das nicht: In der Zahl 0 steckt Information, die man nicht einfach weglassen kann
Wenn der Kunde bei einer 0 gerne das Feld rosarot mit gelben und blauen Topfen haben will, so ist das zwar nicht logisch aber ganz einfach umzusetzen. Ich habe schon öfters erlebt, das ein Kunde etwas will, das er von einer anderen Software her gewohnt ist, auch wenn es einem selbst nicht ganz logisch erscheint. Und Erfahrungsgemäß macht es eine NULL in der DB nur komplizierter, wenn man die Logik nicht so im Griff hat. Mit NULL, 0 und 1 und das ganze als boolean dann in Pascal zu verarbeiten kann schon interessant werden. Weil NULL ja als 'Nichtwert' zu betrachten ist der weder 0=false oder 1 (bzw. <> 0) als true zu bewerten ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 5189
Registriert: Fr 8. Apr 2011, 09:01

Re: DBEdit: 0 ausblenden

Beitrag von wp_xyz »

Wenn man Records mit bestimmten Werten optisch hervorheben will, so hat das seinen Sinn. Aber eine einmal eingegebene 0 verschwinden zu lassen, so dass man nicht mehr unterscheiden kann, ob hier vielleicht noch gar nichts eingetragen worden ist, ist Datenverfälschung. Aber ich vermute eher, dass in diesem Thread ein Konfigurationsfehler vorliegt, infolge dessen leere Felder mit der Zahl 0 vorbelegt worden sind statt mit NULL.

Soner
Beiträge: 734
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: DBEdit: 0 ausblenden

Beitrag von Soner »

wp_xyz hat geschrieben: Mo 24. Apr 2023, 23:09 Also ich verstehe das nicht: In der Zahl 0 steckt Information, die man nicht einfach weglassen kann. Oder ist das ein Platzhalter für "keine Eingabe"? Dann sollte in der Datenbank der Wert NULL stehen (nicht die Zahl 0), und damit sind die entsprechenden datensensitiven Controls bei diesen Feldern automatisch leer. Das ist ohnehin der Default, wenn bei Feldern keine Eingabe gemacht worden ist. Siehe beigefügtes Beispiel.
Wegen zwei Gründen:
1) Unübersichtlichkeit der Informationen, wenn man mit Zahlenkolonnen arbeitet, dann erleichtert es, weil man schnell sieht wo etwas eingegeben ist. Ich verwende es u.a. für die Bestellvorlage von Kunden, der Benutzer kann schnell sehen an welchem Tag etwas bestellt wurde, sonst müsste er genauer schauen. Wo die Zahl 0 und der Wert Null wichtig ist, mache ich die Zellen mit 0 hellgrau. Der Wert Null ist meistens nur bei BLOB-Felder wichtig.
2) Bei Rechenoperation bedeutet Null für Firebird, wahrscheinlich bei anderen DBMS auch, nichts, es liefert Null für die ganze Operation auch wenn nur eine Zeile den Wert Null hat. Bei Spalten wo ich rechne mache ich immer "default 0".
wp_xyz hat geschrieben: Di 25. Apr 2023, 10:33 .. Aber eine einmal eingegebene 0 verschwinden zu lassen, so dass man nicht mehr unterscheiden kann, ob hier vielleicht noch gar nichts eingetragen worden ist, ist Datenverfälschung. ..
Das ist vom Anwendungsfall abhängig, wie ich oben gesagt habe, es ist für die meisten Anwendungen unwichtig zu wissen ob da etwas eingegeben wurde oder gelöscht wurde. Wenn das wichtig ist, dann erstellt man Protokolltabelle. Übrigens man ändert ja mit meiner Lösung nichts an der DB, nur bei der Anzeige lasse ich 0 verschwinden. Beim bearbeiten erscheint die 0.

Ich934
Lazarusforum e. V.
Beiträge: 370
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: DBEdit: 0 ausblenden

Beitrag von Ich934 »

Zwie einfache Gründe:

1. Alte Datenbank, die konvertiert wurde: damit ist das einfach so und es soll nichts geändert werden.
2. Es ist so gewünscht.

Für mich ist das Problem gelöst und ich kann das so umsetzen. Eine Möglichkeit wie in einem MaskEdit wäre zwar schöner gewesen, aber gut, mache ich das so...
Tipp für PostgreSQL: www.pg-forum.de

Antworten