Wie handhabt ihr Stringlänge?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Wie handhabt ihr Stringlänge?

Beitragvon Soner » 26. Jul 2017, 10:47 Wie handhabt ihr Stringlänge?

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?
.
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon mse » 26. Jul 2017, 12:37 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.
mse
 
Beiträge: 1993
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Soner » 26. Jul 2017, 21:48 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.
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon mse » 27. Jul 2017, 04:47 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.
mse
 
Beiträge: 1993
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Soner » 27. Jul 2017, 08:41 Re: Wie handhabt ihr Stringlänge?

Das hört sich gut an. Irgend wan bringst du mich dazu msegui zu benutzen.
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried