Die Methode Locate
Nach oben zu Datenmengen durchsuchen
Die Methode Locate positioniert den Cursor auf den ersten Datensatz, der mit der angegebenen Menge von Suchkriterien übereinstimmt. Im einfachsten Fall übergeben Sie der Methode Locate den Namen der zu durchsuchenden Spalte, einen zu suchenden Feldwert und ein Options-Flag zur Angabe, ob bei der Suche die Groß-/Kleinschreibung berücksichtigt werden soll, oder ob die Suche nach einem Teilschlüssel zulässig ist. (Bei der Suche nach einem Teilschlüssel kann der als Suchkriterium angegebene String ein Präfix des eigentlichen Feldwerts sein.) Mit dem folgenden Quelltext wird der Cursor in die erste Zeile der Datenmenge CustTable gesetzt, in welcher der Wert in der Spalte Company "Professional Divers, Ltd." lautet:
var
LocateSuccess: Boolean;
SearchOptions: TLocateOptions;
begin
SearchOptions := [loPartialKey];
LocateSuccess := CustTable.Locate('Company', 'Professional Divers, Ltd.', SearchOptions);
end;
TLocateOptions SearchOptions;
SearchOptions.Clear();
SearchOptions << loPartialKey;
bool LocateSuccess = CustTable->Locate("Company", "Professional Divers, Ltd.",
Wenn Locate eine Übereinstimmung findet, wird der entsprechende Datensatz zum aktuellen. Locate liefert in diesem Fall True zurück. Die Methode Locate gibt den Wert True zurück, wenn ein passender Datensatz vorhanden ist, den Wert False, wenn dies nicht der Fall ist. Falls bei der Suche keine passenden Daten gefunden werden, bleibt der bisherige aktuelle Datensatz aktiv.
Die Leistungsfähigkeit von Locate zeigt sich erst bei der Suche in mehreren Feldern unter Angabe verschiedener Suchwerte. Suchwerte sind Varianten. Sie können also in Suchkriterien unterschiedliche Datentypen verwenden. Wenn Sie in einem Such- String mehrere Felder angeben, müssen Sie die einzelnen Elemente im String durch Semikolons voneinander trennen.
Da es sich bei den Suchwerten um Varianten handelt, müssen Sie bei der Übergabe mehrerer Werte entweder ein Varianten-Array als Argument übergeben (beispielsweise die Rückgabewerte der Methode Lookup), oder Sie müssen das Varianten-Array mit der Funktion VarArrayOf programmieren. Der folgende Quelltext zeigt eine Suche in mehreren Feldern mit mehreren Suchwerten und einer teilweisen Übereinstimmung:
with CustTable do
Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver','P']), loPartialKey);
TLocateOptions Opts;
Opts.Clear();
Opts << loPartialKey;
Variant locvalues[2];
locvalues[0] = Variant("Sight Diver");
locvalues[1] = Variant("P");
CustTable->Locate("Company;Contact", VarArrayOf(locvalues, 1), Opts);
Locate verwendet immer die schnellste Methode zum Auffinden übereinstimmender Datensätze. Wenn die zu durchsuchenden Felder indiziert sind und der Index zu den angegebenen Suchoptionen kompatibel ist, wird er von Locate verwendet.