Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Editfeld mit Werten aus Query füllen


colaka - So 30.09.12 12:41
Titel: Editfeld mit Werten aus Query füllen
Hallo,

ich habe ein Editfeld, in das als Vorschlag nach jedem getippten Zeichen ein Wert aus einer Query-Abfrage eingetragen werden soll, also so etwas ähnliches wie die Codevervollständigung bei Delphi.
Beispiel: In der Tabelle habe ich in einer Spalte die Einträge: Bett, Schrank, Stuhl, Tisch. Wenn ich jetzt beispielsweise in das Editfeld den Buchstaben S eintippe, soll im Editfeld der erste Begriff aus der Tabelle, der mit "S" anfängt stehen, also Schrank. Der Cursor soll dann natürlich nach dem S stehen, so dass ich auch noch das "t" eintippen kann. Jetzt soll im Editfeld "Stuhl" stehen.
Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt.

Was ich jetzt gemacht habe, funktioniert leider nicht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TFKunden.Edit1Enter(Sender: TObject);
begin
  Tastaturpuffer := '';
end;

procedure TFKunden.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  Eingabe : String;
  T : Char;
begin
  Eingabe := '';
  T := Key;
  Tastaturpuffer := Tastaturpuffer + T;
  Eingabe := Tastaturpuffer + '%';
  DatMod.Query.DataSource := DatMod.DSKunden;
  DatMod.Query.Close;
  DatMod.Query.SQL.Clear;
  DatMod.Query.SQL.Add('SELECT Moebel FROM TKunden.DB');
  DatMod.Query.SQL.Add('WHERE Moebel LIKE "Eingabe"');
  DatMod.Query.Open;
  Edit1.Text := DatMod.Query.FieldByName('Moebel').AsString;
end;


Vielleicht kann mir jemand einen Denkanstoss geben.

Danke


mandras - So 30.09.12 13:43

Wenn das mit dem Cursor nicht 100%ig so sein soll:
Versuch es mit einer ungebundenen TDBLookupCombobox.
Heißt: ListSource, ListField und KeyField müssen gesetzt sein, Datasource und Datafield aber nicht.
Nachdem eine Auswahl getroffen wurde kannst Du den vollen Wert über die Eigenschaft KeyValue der Komponente abrufen.


bummi - So 30.09.12 15:59


Delphi-Quelltext
1:
 DatMod.Query.SQL.Add('WHERE Moebel LIKE "' + Eingabe + '"');