Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DBLookupCombobox (https://www.delphipraxis.net/171755-dblookupcombobox.html)

jangbu 23. Nov 2012 08:19

Datenbank: MSQL • Version: 2000^ • Zugriff über: ADO

DBLookupCombobox
 
Hallo,

in einer DBLookupCombobox zeige ich sortierte (string)Daten einer Tabelle an. Sobald bei aufgeklappter Box eine Taste geklickt wird, wird zum ersten übereinstimmenden Datensatz gesprungen. Soweit so gut. Jetzt ist es so, das die Daten der betroffenen Tabelle immer mit 3 konstanten führenden Zeichen beginnen, sodas immer erst ab dem 4. eingegeben Zeichen eine wirkliche Selektion stattfinden kann.
Bsp:
'22XMueller'
'22XHuber'
'22XSchmit', usw.
Habe ich eine Möglichkeit die Filterfunktion so zu verändern, dass zur Filterung erst mit der Eigabe des 4.Zeichen begonnen werden kann, also nicht erst '22XM' sondern gleich 'M' eingegeben werden kann um den mit 'M' beginnenden Datensatz zu selektieren.

Jemand ne Idee? Danke

Sir Rufo 23. Nov 2012 08:21

AW: DBLookupCombobox
 
Ja, entferne die führenden gleichen Stellen ;)

jangbu 23. Nov 2012 10:11

AW: DBLookupCombobox
 
Nun ja, wenn ich im Listfield die im select um 3 Stellen gekürzten Strings anzeige ist doch aber mein Ergebnis auch um 3 Stellen gekürzt.

Sir Rufo 23. Nov 2012 10:15

AW: DBLookupCombobox
 
Zitat:

Zitat von jangbu (Beitrag 1192553)
Nun ja, wenn ich im Listfield die im select um 3 Stellen gekürzten Strings anzeige ist doch aber mein Ergebnis auch um 3 Stellen gekürzt.

Nö, es gibt einen Lookupwert (rein für die Anzeige) und einen Schlüsselwert (der wird eingetragen) und müssen nicht gleich sein ;)

Uwe Raabe 23. Nov 2012 14:04

AW: DBLookupCombobox
 
Du kannst dich in den KeyPress-Events der ComboBox einklinken und die interne Suchfunktion austricksen:

Delphi-Quellcode:
type
  TDBLookupControlHelper = class helper for TDBLookupControl
  public
    procedure CheckSearchPrefix(const Prefix: string);
  end;

procedure TDBLookupControlHelper.CheckSearchPrefix(const Prefix: string);
var
  Ch: Char;
begin
  if Length(SearchText) < Length(Prefix) then begin
    SearchText := '';
    for Ch in Prefix do
      ProcessSearchKey(Ch);
  end;
end;

procedure TForm181.DBLookupComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  DBLookupComboBox1.CheckSearchPrefix('22X');
end;

Sir Rufo 23. Nov 2012 14:21

AW: DBLookupCombobox
 
@Uwe
Auch wenn die Funktionalität spannend ist, aber würdest du tatsächlich dem User Daten präsentieren, wo die ersten 3 Stellen als "eher störend" empfunden werden, aber für nichts anderes gut, als zur Anzeige, sind?

Evtl. liegt hier sogar noch ein Design Fehler der Datenbank vor.

Ich wäre am Präsentationstag auf jeden Fall im gelben Urlaub :stupid:

PS: Sollten diese 3 Stellen (eigentlich sollen die ja alle gleich sein) tatsächlich benötigt werden, dann würden bei mir die Einträge (in der Anzeige) so aussehen
Code:
Mueller (22X)
Huber (22X)
Schmit (22X)

Uwe Raabe 23. Nov 2012 15:17

AW: DBLookupCombobox
 
Zitat:

Zitat von Sir Rufo (Beitrag 1192626)
Auch wenn die Funktionalität spannend ist, aber würdest du tatsächlich dem User Daten präsentieren, wo die ersten 3 Stellen als "eher störend" empfunden werden, aber für nichts anderes gut, als zur Anzeige, sind?

Ich hatte gerade einen konkreten Fall, bei dem die Personalnummern in dem relevanten Datenbestand alle mit der gleichen Zeichenfolge begannen, weil die eben alle zu diesem einen Bereich gehörten für den das Programm gedacht war. Eine Änderung der Daten kam irgendwie nicht in Frage, da die Nummern vollständig erhalten bleiben sollten. Bei Suchanfragen sollten aber die Anfangszeichen immer vorgegeben sein.

Man könnte sich auch eine Abfrage vorstellen, bei der genau dieses Präfix als Einschränkung gilt. Dann macht es schon Sinn, in so einer Combobox dieses Präfix auch immer voranzustellen. Es muss ja nicht immer eine Konstante sein, wie in dem originalen Beispiel. Dann sind die ersten Zeichen schon relevant und können nicht unbedingt weggelassen werden.

Es kommt eben immer auf den konkreten Fall an.

Sir Rufo 23. Nov 2012 16:29

AW: DBLookupCombobox
 
@Uwe hier werden diese Daten auch nicht als "eher störend" wahrgenommen, weil diese auch zusammengehören.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 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