Hallo,
habe folgendes Problem:
Ich lese Einträge aus einer SQLite-Datenbank in ein Array ein, und füge sie anschließend in eine ListBox ein.
Das sieht etwa so aus:
Delphi-Quellcode:
[...]
for i := 0 to High(Eintrag) do
begin
Eintrag[i].Vorname := database.Results[i][0];
Eintrag[i].Strasse := database.Results[i][1];
[...]
Form1.ListBox1.Items.Add(Eintrag[i].Vorname);
end;
[...]
Bisher sind das knapp 3000 Einträge.
Das nette an der ListBox finde ich die AutoComplete-Eigenschaft. Wenn ich also 'chris' tippe, springt die ListBox gleich zum Eintrag 'Christoph'.
Etwas erstaunlich ist nur, dass die AutoComplete-Eigenschaft nur dann funktioniert, wenn ich die ListBox-Eigenschaft 'Sorted' auf 'true' setze.
Die Eigenschaft 'AutoComplete' scheint ohne 'Sorted:=true' keine Funktion zu besitzen.
Das wäre mir ja eigentlich egal, aber nun habe ich Schwierigkeiten mit der Sortierreihenfolge der Listbox. Denn diese sortiert anders als meine SQLite-Datenbank (auch wenn ich diese vor Einlesen in das Array mit 'order by Name' sortiere).
Wenn ich nun einen Eintrag in der ListBox anwähle
Form1.RichEdit2.Text:=Eintrag[Form1.ListBox1.ItemIndex].Vorname;
dann stimmen ItemIndex und die Nummer des Eintrags im Array nicht überein (aber genau das sollen sie tun).
Dünne ich meine Ergebnismenge aus, soll wieder in das Array geschrieben werden.
Die ListBox (sowie das Array) enthält also immer die Ergebnismenge der aktuellen Datenbankabfrage.
Mir würde es ausreichen, wenn die Eigenschaft 'AutoComplete' das tun würde was sie soll - tut sie aber nicht (ohne Sorted:=true).
Als Umgehung könnte ich alle Daten aus der Datenbankabfrage zunächst in eine StringList lesen, diese nach Name sortieren und
danach dann in das array einlesen - aber das kann es doch wohl nicht sein (würden den Einleseprozess sehr verlangsamen, ich habe über 70 Spalten in der Tabelle...). Die StringList müsste ausserdem als
csv-Datei angelegt werden, (Name;Vorname;Strasse...); Problem dabei ist, dass auch Hochkommata und Anführungszeichen in den Einträgen verwendet werden. Der Einleseprozess wäre vorsichtig gesagt etwas umständlich.
Was kann ich tun?
Vielen Dank im Voraus,
Christoph
P.S.: Ich habe in diesen Bereich geposted, weil es sich mE. um ein Problem mit den Eigenschaften der Komponente ListBox handelt.