Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TDBComboBox in Delphi-Tokyo: anderes Verhalten (https://www.delphipraxis.net/192233-tdbcombobox-delphi-tokyo-anderes-verhalten.html)

meinrad 31. Mär 2017 21:49

Datenbank: MSSQL • Version: 2016 • Zugriff über: ADO

TDBComboBox in Delphi-Tokyo: anderes Verhalten
 
VCL-Anwendung mit MSSQL und ADO-Komponenten:

Bis und mit Delphi Berlin Update 2 kann man in einer TDBComboBox einen Text eingeben, bzw. damit filtern, auch wenn das zugeordnete Datenfeld ein Integer-Feld ist, d.h. die TDBComboBox verhält sich diesbezüglich wie eine gewöhnliche TComboBox.

In Tokyo ist in diesem Fall nur noch die Eingabe von Zahlen möglich. Lässt sich diese "Sperre" mit einer simplen Einstellung aufheben, oder muss ich meine diversen TDBComboBoxen alle umprogrammieren? Es ist mir klar, dass der simple Weg über eine TDBLookupComboBox führen könnte, aber das war mir bei diesem Programm damals zu wenig performant.

Besten Dank für jeden Hinweis.

Uwe Raabe 31. Mär 2017 22:23

AW: TDBComboBox in Delphi-Tokyo: anderes Verhalten
 
Ursache ist wohl, daß das AutoComplete früher vor der Überprüfung auf gültige Zeichen gemacht wurde, nun aber erst hinterher. Allerdings ist aus dem ungültigen Zeichen dann schon ein #0 geworden. Mit einer simplen Einstellung wirst du das wohl nicht hinbekommen.

Rein formal ist das jetzige Verhalten schon richtig, da du in das Feld eben keine ungültigen Zeichen eingeben sollst.

Stevie 31. Mär 2017 22:28

AW: TDBComboBox in Delphi-Tokyo: anderes Verhalten
 
Tjo, du konntest reintippen, aber es hat effektiv nix gebracht, weil du beim Eintragen eines Strings in ein Integer-Feld eine hübsche Exception bekommen hast.

meinrad 1. Apr 2017 09:10

AW: TDBComboBox in Delphi-Tokyo: anderes Verhalten
 
Besten Dank für Eure Hilfe.

Tatsächlich müsste ich in Vcl.DBCtrls nur 2 Zeilen auskommentieren (oder den ganzen if... Block), das funktioniert dann wie früher:

if (Key >= #32) and (FDataLink.Field <> nil) and not FDataLink.Field.IsValidChar(Key) then
begin
//MessageBeep(0);
//Key := #0;
end;

Die Transformation des Fremdschlüssels von "Name" zu "Index" uu. mache ich ohnehin in den beiden Methoden TField.OnGetText und OnSetText. Damit bilde ich im Prinzip eine dbLockUpComboBox nach.

Aber da pflege ich dieses Programm wohl sinnvoller mit der Berlin-Version weiter, solange es noch benötigt wird.

himitsu 1. Apr 2017 14:45

AW: TDBComboBox in Delphi-Tokyo: anderes Verhalten
 
Oder mal richtig auf die LookupComboBox umsteigen, die ja eigentlich schon immer die passendere Lösung war.

Delphi war hier schon immer genauso schlampig, wie Microsoft, solche was Prüfungen betrifft. (NumbersOnly :lol:)
Natürlich kannst du die Eingabe auch vorher abfangen und dann das Zeichen via PASTE (Copy&Paste) ins Edit einfügen oder es über SelText versuchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz