Entwickler-Ecke

Datenbanken - Autovervollständigung in einem TEdit


m.schultheis - Mo 01.09.03 17:32
Titel: Autovervollständigung in einem TEdit
Hy Leute,

ich gebe in einem TEdit eine Telefonnummer ein, wenn diese schon in einer Tabelle vorhanden ist, dann möchte das die Telefonnummer automatisch aufgrund der Nummer in der Datenbank vervollständigt wird ...
sprich : ich gebe ein 880....

und im TEdit erscheint dann die Nummer: 880-9001 ...


CenBells - Mo 01.09.03 19:03

Hallo,

dazu benötigst du das onchange event des Edits. Und dann setzt du auf die Tabelle mit den telefonnummern einen filter. Und wenn ein datensatz durch den filter durchkommt, kann vervollständigt werden.

Gruß
Ken


UGrohne - Mo 01.09.03 20:09

Es gäbe auch die Möglichkeit, eine ComboBox als Eingabefeld zu nehmen, in die Items die Nummern reinzuschreiben. Min. ab Delphi 7 unterstützt die CB AutoVervollständigung.

Fragt sich nur, was Datenmengen-Mmäßig sinnvoller ist.


m.schultheis - Mo 01.09.03 21:28

das funktioniert wunderbar danke ... ich frag mich ab und an warum einfache sachen nie auf der hand liegen ;o) aber ich hätte gerne das wenn ich schon eine ziffer eingebe , das er mir im combo auch schon einträge anzeigt, er zeigt sie nur an wenn er tatsächlich den kompletten zeichenstring gefunden hat ...


UGrohne - Mo 01.09.03 21:32

Hmm, weiß gerade auf die Schnelle nimmer, wie sich das Teil verhält. Du suchst also eher so etwas, wie in Outlook, wenn man ne neue Mail schreibe, die Adresse eingibt und dann z.B. so ein weiteres Fenster unten erscheint, aus dem man den Empfänger auswählt?
Oder noch leichter gesagt, eine Art CodeInsight, wie in Delphi?

Hmm, das könnte ich auch gebrauchen, hat wer ne Idee?


grayfox - Mo 01.09.03 22:20

hallo UGrohne!
ich hab diesen beitrag mal gefunden:

Zitat:

...eine Autovervollständigung in einer Combobox realisieren?
Autor: Simon Grossenbacher
Homepage: http://www.swissdelphicenter.ch
{
Ever wondered how to make a combobox
with autocomplete like the one in the explorer?
The trick is in the CB_FINDSTRING API call.
}



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
var 
  LastKey: Word; 

procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word; 
  Shift: TShiftState); 
begin 
  LastKey := Key; 
end

procedure TForm1.ComboBox1Change(Sender: TObject); 
var 
  Srch: string
  ix: Integer; 
begin 
  Srch := combobox1.Text; 
  if LastKey = $08 then 
  begin 
    LastKey := 0
    Exit; 
  end
  LastKey := 0
  ix := combobox1.Perform(CB_FINDSTRING, - 1, Longint(PChar(Srch))); 
  if ix > CB_ERR then 
  begin 
    combobox1.ItemIndex := ix; 
    combobox1.SelStart  := Length(Srch); 
    combobox1.SelLength := (Length(combobox1.Text) - Length(Srch)); 
  end
end;


hab ihn aber noch nicht getestet. vielleicht hilfts dir weiter

mfg, stefan


UGrohne - Di 02.09.03 09:00

grayfox hat folgendes geschrieben:
hallo UGrohne!
ich hab diesen beitrag mal gefunden:

Danke, werd ich bei Gelegenheit demnächst mal ausprobiern.


hansa - Di 02.09.03 10:46

So würde das gehen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
DataSet.close;
DataSet.SelectSQL.text := 'SELECT * FROM TELNRTABELLE WHERE NR LIKE (Edit1.Text + '%'') ORDER BY NR';
Dataset.open.
Dateset.First;
while not dataset.EOF do begin
   ListBox.Lines.add (....);
   Dataset.next;
end;


Und dann wie bereits gesagt in das OnChange-Event des Edits.