Wie handhabt ihr Stringlänge?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Soner
Beiträge: 623
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

Wie handhabt ihr Stringlänge?

Beitrag von Soner »

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/fcl/db/tfield.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?
.

mse
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?

Beitrag von mse »

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.

Soner
Beiträge: 623
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?

Beitrag von Soner »

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.

mse
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?

Beitrag von mse »

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.

Soner
Beiträge: 623
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?

Beitrag von Soner »

Das hört sich gut an. Irgend wan bringst du mich dazu msegui zu benutzen.

Antworten