Fehler in DBEdit

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Fehler in DBEdit

Beitrag von ralli »

Ich habe heute morgen wahrscheinlich einen Fehler in der DBEdit Komponente
entdeckt, als ich dabei ging, eine Eingabemaske zu machen.

Zum Einsatz kommt firebird 2.1 embedded.

Dabei muss ich ja darauf achten, das auch nur die maximale Eingabe in
den Feldern möglich ist.

Das wird normalerweise mit der Eigenschaft maxlength der Komponente
DBEdit erledigt, wo die maximale Feldlänge eingetragen wird.

Lazarus ermitttelt aber immer eine falsche Feldlänge, das hat
meineserachtens aber nichts mit Firebird zu tun.

Habe es hiermit bei mehreren Feldern kontrolliert.

Code: Alles auswählen

ShowMessageFmt('Länge=%d Name=%s',[DBEdit1.Field.DataSize, DBEdit1.Field.FieldName]);
Beispiel original Feldlänge 4, er ermittelt 17

Original Feldlänge 8, er ermittelt 33.

Entdeckst Du eine Regelmässigkeit ?

Er multipliziert immer die original Feldlänge mit 4 und zählt noch 1 dazu.

Meine Lösung:

Ich schreibe eine Funktion, die dann von der falsch ermittelten
Feldlänge 1 abzieht und dann den Rest durch 4 teilt, dann passt es wieder.

Aber sauber ist das nicht.

Oder hat einer eine andere Lösung oder Idee?

Gibt es gleiche Erfahrungen ?
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

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

Re: Fehler in DBEdit

Beitrag von theo »

ralli hat geschrieben: Er multipliziert immer die original Feldlänge mit 4 und zählt noch 1 dazu.
Könnte mit UTF-8 zusammenhängen. Ein UTF-8 Code Point kann aus bis zu 4 Bytes bestehen. (ä etc. belegt 2 Bytes)
Das ist vllt. gar kein Bug.

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Fehler in DBEdit

Beitrag von ralli »

Das ist eine Erklärung, aber keine Lösung des Problems. Maxlenght muss gesetzt werden, damit der Benutzer nur die maximale Feldlänge eingeben kann. Wird bei der falschen Berechnung nur 1 Zeichen zuviel eingegeben, dann crasht das Programm. Oder kann ich auch ohne maxlenght erreichen, das nur 12 Zeichen eingegeben werden können, weil das die maximale Feldlänge ist. Und wo sind die anderen DB Experten? Benutzt Ihr maxlenght in DBEdit nicht ? Ich bitte um Vorschläge, wenn es jemand anders gelöst hat.
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

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

Re: Fehler in DBEdit

Beitrag von theo »

ralli hat geschrieben: Ich schreibe eine Funktion, die dann von der falsch ermittelten
Feldlänge 1 abzieht und dann den Rest durch 4 teilt, dann passt es wieder.
Dann mach's doch einfach so. Jetzt hast du ja eine Begründung wieso es so sein könnte.

Code: Alles auswählen

DBEdit1.Field.DataSize div 4
Wenn ich das richtig verstehe.

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Re: Fehler in DBEdit

Beitrag von ralli »

Das hat nicht funktioniert, so geht das nicht, das ist nicht praktikabel, auch hier wunder ich mich doch sehr, das ich dieses Problem als einzigster haben sollte.... Alle Datenbankfreunde haben dieses Problem im Zusammenhang mit dem so hoch favorisierten Zeichensatz utf8 nicht ? Oder ist das zu trivial ?
Jetzt habe ich den Zeichensatz auf win1251 umgestellt, da funktioniert es einwandfrei. Ich bin schon etwas frustriert, oder wird da Wissen zurückgehalten. Wo sind die Profis ?
Pentium 4 - 2GB - Debian Lenny - Gnome 2.22.3 - Nvidia 8600 GT - FPC 2.2.2 - Lazarus 0.9.26 - GTK2

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

Re: Fehler in DBEdit

Beitrag von theo »

ralli hat geschrieben:Das hat nicht funktioniert, so geht das nicht, das ist nicht praktikabel
Wieso?

Antworten