Wenn die Textfelder einer Datenbank als UTF8-Definiert wurde dann sind die Feldlängen bei:
-TField.Size=Textlänge * 4,
-TField.Datasize=TField.Size+1.
Diese *4 soll dafür sorgen dass alle Unicode-Zeichen verwendet werden kann.
Das Problem ist, dass der Benutzer in allen Edit-Controls längeren Text eingeben kann als erlaubt, die Folge ist beim Speichern ein Exception bei ZEOS und stillschweigendes nicht Speichern bei SQLDB.
Ich habe bei meinem Programm die tatsächlichen Zeichenlängen mit SQLBefehl geholt (FB, ZEOS) und in TDBEdits mit der EIgenschaft MaxLength eingeschränkt. Das klappt gut aber nur bei TDBEdits, bei anderen Controls wie TDBGrid muß man entweder eigenen Editor erstellen oder TField.OnSetText behandeln und längere Texte abscheiden. Das ist umständlich paßt nicht zur RAD-Umgebung und im Fall TField.OnSetText irritiert das sogar Benutzer, weil der Benutzer erst lange Texte eingeben kann, dann wird es abgeschnitten.
Eigentlich steht sowohl bei Delphi- als auch Fpc-Dokumentation dass die Eigenschaft TField.Size für Zeichlänge und TField.Datasize für Speichergröße ist, aber irgendwie weicht das von Tatsachen ab.
https://www.freepascal.org/docs-html/fc ... .size.html
Na egal, villeicht habe ich etwas falsch verstanden oder ich mache hier etwas falsch.
Meine Frage ist wie macht ihr das, wie behandelt ihr die längeren Strings die von Benutzer eingegeben werden?
.
Wie handhabt ihr Stringlänge?
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Wie handhabt ihr Stringlänge?
In MSEgui funktioniert es so, dass die User in einem Data-Edit-Widget oder einem Datengitter beliebig viele Zeichen eingeben können. Nach gedrückter Enter-Taste oder beim Verlassen des Widgets oder der Gitter-Zelle oder beim Speichern des Records wird die Zeichenlänge auf die maximale Zeichenzahl des Feldes gekürzt und entsprechend angezeigt.
-
- Beiträge: 726
- 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: Wie handhabt ihr Stringlänge?
Dann gibt es ja ein Grund mehr msegui nicht zu benutzen. Das Problem is ja das bei Lazarus/FPC Stringlänge für TFiels falsch ist und Benutzer bis zu viermal Lange Text als erlaubt eingeben kann.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Wie handhabt ihr Stringlänge?
Dieses Problem kennt MSEgui nicht, da MSEgui grundsätzlich Unicodestring und die von den DB's gemeldeten Feldlängen benutzt. 
Bis zur Eingabe mit Enter beliebige Zeichen und Zeichenlängen zuzulassen ist eine Design-Entscheidung welche in MSEgui konsequent durchgeführt wurde.
Wenn man will, kann man in den (DB)-Editwidgets die "maxlength" Eigenschaft setzen, um die Zeichenlänge während der Eingabe zu begrenzen. Der Vorteil wenn man das nicht macht ist, dass die Anwender versehentlich zuviel eingegebene Zeichen zu Beginn des Eingabefeldes nach eingeben des gesamten Textes und vor drücken von Enter löschen können.
Um Fehlermeldungen zu vermeiden werden die Texte vor der Übergabe an die DB-Felder auf jeden Fall gekürzt.

Bis zur Eingabe mit Enter beliebige Zeichen und Zeichenlängen zuzulassen ist eine Design-Entscheidung welche in MSEgui konsequent durchgeführt wurde.
Wenn man will, kann man in den (DB)-Editwidgets die "maxlength" Eigenschaft setzen, um die Zeichenlänge während der Eingabe zu begrenzen. Der Vorteil wenn man das nicht macht ist, dass die Anwender versehentlich zuviel eingegebene Zeichen zu Beginn des Eingabefeldes nach eingeben des gesamten Textes und vor drücken von Enter löschen können.
Um Fehlermeldungen zu vermeiden werden die Texte vor der Übergabe an die DB-Felder auf jeden Fall gekürzt.
-
- Beiträge: 726
- 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: Wie handhabt ihr Stringlänge?
Das hört sich gut an. Irgend wan bringst du mich dazu msegui zu benutzen.