Приложения для работы с локальными базами данных_______________533

ленным образом. Например, поиск (в том числе и рассмотренный выше ускорен-
ный поиск) по фамилии может осуществляться операторами

TLocateOptions SearchOptions;

SearchOptions « loPartialKey « loCaselnsensitive;

Tablel->Locate("Fam",EFam->Text, SearchOptions);

причем он будет работать независимо от того, как индексирована база данных.
Впрочем, если набор данных соответствующим образом индексирован, то поиск
производится быстрее.

Приведенный код можно сократить до двух операторов:

TLocateOptions SearchOptions;

Tablel->Locate("Fam", EFam->Text,

SearchOptions«loPartiа1Кеу«loCaselnsensitive);

При поиске по нескольким полям можно воспользоваться функцией VarAr-
rayOf, которая формирует тип Variant из задаваемого ей массива параметров лю-
бого типа. Например, рассмотренный ранее поиск по отделу и фамилии может
быть осуществлен операторами

TLocateOptions SearchOptions;

Variant locvalues[] = {EDep->Text, EFam->Text);

Tablel->Locate("Dep;Fam", VarArrayOf(locvalues,1),

SearchOptions«loPartialKey«loCaselnsensitive) ;

И в заключение о последнем методе поиска — Lookup. Этот метод определен
следующим образом:

System::Variant _fastcall Lookuplconst System:: AnsiString KeyFields,
const System::Variant SKeyValues,-
const System::AnsiString ResultFields) ;

Первые два параметра аналогичны методу Locate. Третий параметр — строка,
перечисляющая поля, значения которых возвращаются в виде массива Variant.
Если не найдено соответствующей записи, функция возвращает false.

Например, если вы хотите найти запись, относящуюся к сотруднику, фами-
лия которого указана в окне EFam, и вывести в окно EDep название отдела, в кото-
ром он работает, то эти операции можно осуществить следующим образом:

EDep->Text = Tablel->Lookup("Fam",EFam->Text,"Dep") ;

Метод Lookup не изменяет положения курсора. Он только возвращает значе-
ния указанных полей. Они могут использоваться любым способом. В частности,
они могут использоваться вместо параметра KeyValues в другом операторе Lookup
или Locate. Это открывает широкие возможности формирования сложных запро-
сов по нескольким таблицам.                I

9.11.7 Методы установки диапазона допустимых значений

Ранее рассматривались различные способы задания критериев отбора установ-
кой соответствующих значений свойств полей и наборов данных. Теперь рассмот-
рим коротко несколько методов, позволяющих задавать диапазон допустимых зна-
чений поля во время выполнения приложения. Метод SetRangeStart переводит
набор данных в состояние dsSetKey и следующий оператор присваивания значе-
ния полю воспринимается как задание для поля нижней границы диапазона воз-
можных значений. Метод SetRangeEnd действует аналогично, но последующий
оператор присваивания воспринимается как задание верхней границы диапазона.
После того, как пределы диапазона установлены, можно выполнить метод Apply-
Range. При этом начнут использоваться установленные границы диапазона и до-
ступными для просмотра и редактирования будут только те записи, в которых зна-
чения указанного поля находятся внутри диапазона.