Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

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

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

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