[Gelöst] DBEdit: 0 ausblenden
-
- 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
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.
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
Re: DBEdit: 0 ausblenden
Bei einem normalen TEdit geht das im OnChange.
Klappt das mit TDBEdit nicht?
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;
Re: DBEdit: 0 ausblenden
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.
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.theo hat geschrieben: Mo 24. Apr 2023, 07:55Code: Alles auswählen
procedure TForm1.Edit1Change(Sender: TObject); begin With Sender as TCustomEdit do if Text='0' then Hide else Show; end;
Re: DBEdit: 0 ausblenden
Ich nahm an, dass es es vorhandene Datensätze gibt, wo eine Änderung dieses Feldes nicht möglich sein soll.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.
Sonst verstehe ich es auch nicht.
- 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
Ich glaube du liegst richtig, weil original war es ja folgende Fragetheo 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 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).
-
- 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
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
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
-
- 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
OK, dann nehme ich das Snippet von theo oben und leg einfach eine andere Komponente darüber. Trotzdem Danke.af0815 hat geschrieben: Mo 24. Apr 2023, 13:05 Ich glaube du liegst richtig, weil original war es ja folgende Frage
Tipp für PostgreSQL: www.pg-forum.de
Re: DBEdit: 0 ausblenden
Warum machst du nicht einfach "Enabled" auf false?
Das macht den Text grau und man kann nichts eingeben.
Das macht den Text grau und man kann nichts eingeben.
-
- 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
Weil die 0 optisch stört. Das ist einfach eine optische Sache.
Tipp für PostgreSQL: www.pg-forum.de
-
- 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
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;
Re: DBEdit: 0 ausblenden
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
- 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
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.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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: DBEdit: 0 ausblenden
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.
-
- 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
Wegen zwei Gründen: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.
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".
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.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. ..
-
- 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
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...
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