Nichts machen, bis der Benutzer aufhört zu tippen. (z.B. Bei jedem Tastendruck einen Timer starten, der auf 100ms eingestellt ist. Im OnTimer des Timers dann die Suche ausführen).
Ich würde das per
ADO mit FetchAsync laufen lassen. Bei jedem Neustart der Suche (siehe Timer) wirst Du die aktuelle
Query ggf. abbrechen (geht bei FetchAsync ganz einfach) und neu starten. Die Daten kommen vom Server dann schön asynchron, in Happen und alles sieht sehr flüssig aus. Isses auch.
Nur wenn der Server richtig ackern muss (weil eine Suchspalte nicht indexiert ist), dauert das Abbrechen und die Sache kommt ins Stottern. Deshalb nimmt man für eine coole Livesuche auch einen Volltextindex, aber das ist wieder eine etwas andere Geschichte (Indexed View mit PK und Suchtext usw.)
Oder Du machst alles einfach in-memory und spielst mit der OnFilterRecord Geschichte herum. Das ist aber auch erstaunlich langsam, also immer schön im Hintergrund filtern.
Nach den ersten x Zeichen (3 ist schon mal eine gute Wahl) werden die Daten beim Server abgeholt. Alle weiteren werden dann im
TDataSet.OnfilterRecord weiter gefiltert.
Ich würde das ggf. noch von der Anzahl der zu erwartenden Daten abhängig machen. Wenn da 1000000 Records kommen, wird es vielleicht doch etwas langsam.
Ach,
MSSQL ist ideal dafür.