Russian Belarusian English German Japanese Ukrainian

Поиск по индексным полям

CuBook25

Для набора данных Table имеются методы, позволяющие вести поиск записей только по индексным полям. Перед вызовом любого из этих методов следует установить в качестве текущего индекс, построенный по используемым для поиска полям. Методы поиска можно разделить на две группы, в первую из которых входят методы FindKey, SetKey, EditKey и GotoKey, предназначенные для поиска на точное соответствие, а другую образуют методы FindNearest, SetNearest, EditNearest и GotoNearest, допускающие частичное совпадение заданных для поиска значений и значений полей записей.
 
Метод с объявлением:
bool __fastcall FindKey(const System::TVarRec *KeyValues, const int KeyValues_Size);
выполняет поиск в наборе данных Table записи, у которой значения полей совпадают со значениями, указанными в параметре KeyValues. Список полей для поиска не задается, а берутся индексные поля в соответствии с текущим индексом. Если поиск завершился успешно, то найденная запись становится текущей, а метод возвращает значение true. При неудачном поиске указатель текущей записи не перемещается, а метод возвращает значение false.
 
Если заданным условиям поиска соответствует несколько записей, то указатель текущей записи устанавливается на первую из них. Порядок сортировки и, соответственно, порядок расположения записей в наборе данных определяется текущим индексом, по которому и ведется поиск.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Table1->IndexFieldNames = "Continent;Capital";
if(!Table1->FindKey(ARRAYOFCONST((EditContinent->Text, EditCapital->Text))))
{
ShowMessage("Запись не найдена!");
}
}
Здесь в наборе данных выполняется поиск первой записи, поля Continent и Capital которой содержат значения, введенные в редакторы EditContinent и EditCapital. В случае неудачного поиска пользователю выдается сообщение. Перед выполнением поиска текущим устанавливается индекс, построенный по поисковым полям.
Аргументы для метода FindKey задаются с помощью функции ARRAYOFCONST, которая в примере из двух констант формирует массив, имеющий тип
TVarRec. Вместо метода FindKey можно вызывать методы SetKey, EditKey и GotoKey, которые применяются совместно.
 
Метод FindNearest имеет объявление:
void __fastcall FindNearest(const System::TVarRec *KeyValues, const int KeyValues_Size);
В отличии от метода FindKey, производит поиск значений полей записей набора данных Table, которые только частично совпадают со значениями, заданными для поиска. Сравнение проводится, начиная с первого стоящего в поле, символа. Поиск по частичному совпадению можно применять к строкам или к данным других типов, например, целым. Поиск с помощью метода FindNearest всегда является успешным и перемещает указатель текущей записи на запись, в наибольшей степени отвечающую условиям поиска.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Table1->IndexFieldNames = "Capital";
Table1->FindNearest(ARRAYOFCONST(("Br")));
}
В приведенной процедуре указатель текущей записи перемещается на запись, поле Capital которой содержит значение, начинающееся с букв Br. Если такой записи нет, то будет найдена запись, в которой поле Capital имеет значение, начинающееся со следующих за Br букв.
 
Вместо метода FindNearest можно использовать комбинацию методов SetNearest, EditNearest и GotoNearest, работа с которыми аналогична работе с соответствующими методами поиска на точное соответствие значений полей. При поиске по нескольким полям текущего индекса используется свойство KeyFieldCount типа bool, указывающее, сколько полей индекса, начиная с первого, участвует в поиске. По умолчанию поиск осуществляется по всем полям текущего индекса.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий