...Bei den Daten handelt es sich um ca 1.2 Mio Datensätze. ...und stellt Daten für eine LookUp bereit.
Hmm. Das ist eigentlich Quatsch. Willst Du wirklich alle 1.2 Mio Datensätze präventiv laden? Soll der Anwender wirklich durch 1.2 Mio Zeilen scrollen?
Stell Dir vor, Du hättest -sagen wir- 100 Benutzer. Dann würden beim Programmstart einfach mal eben so ca. pro Benutzer ca. 100 MB (bei 100 Nutzern also 10GB an Daten über das Netz rauschen), und zwar *bevor* die Suche überhaupt losgeht, von der offensichtlichen Wartezeit ganz zu schweigen.
Wenn du z.B. mit Fulltext in der
DB suchen könntest, dann könntest Du die Abfragen fast ohne Verzögerung aus der
DB laden, und zwar immer nur die, die dem Suchkriterium entsprechen. Über Fulltext-Suche kannst du auch Ähnlichkeitssuchen implementieren, also ähnlich der Google-Suche.
Aber wenn Du unbedingt -aus welchen Gründen auch immer- die 1.2 Mio DS im Speicher benötigst, dann -na ja- dann haust Du die
Query in einen Thread, setzt alle Suchfelder und -Buttons auf 'disabled', lädst das Zeugs im Thread und der meldet dann per über sein Terminate-Event den Vollzug. In diesem Event setzt Du dann alle Suchfelder und -buttonis wieder auf 'enabled'. Wupps, kann die Suche losgehen.
Mir allerdings würde das nicht gefallen. Ich würde die Volltext-Option des
DB-Servers verwenden, falls der das überhaupt kann, Wenn nicht, würde ich einen Suchserver schreiben, der 1x diese Tabelle aus der
DB lädt (und auch komplexe Aktualisierungen des geladenen Bestandes vornehmen kann, denn irgendwann sind die Daten ja doch veraltet). Dieser Server kommuniziert über
TCP mit den Clients bzw. anders herum: Die Clients fragen den Server nach einer Teilliste, die den Suchkriterien entspricht.
Hier sind Anregungen für Delphi-Fulltextsuche
http://stackoverflow.com/questions/9...ird-and-delphi