Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка для ИГА.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.58 Mб
Скачать

Вопрос 9 Поиск записей в наборе данных средствами Delphi

Поиск записи, удовлетворяющей какому-либо условию, означает переход на эту запись или возвращение значений некоторых полей найденной записи. Поиск может осуществляться как по индексным полям, так и по полям, не входящим в индекс.

1.fun Locate (const KeyFields: string, const KeyValues: Variant, Options: TLocateOptions): Boolean

Метод Locate ищет первую запись, удовлетворяющую критерию поиска. Если такая запись найдена, делает ее текущей и возвращает True. Если поиск неуспешен – возвращает False. Поля, по которым ведется поиск, не обязаны быть индексными.

Список KeyFields указывает поле или несколько полей, по которым ведется поиск. Если полей несколько, их названия разделяются «;».

Критерии поиска задаются в вариантном массиве KeyValues так, что i-е значение в KeyValues ставится в соответствие i-му полю в KeyFields. При поиске по одному полю, его поисковое значение можно указывать непосредственно, в случае поиска по нескольким полям – значения этих полей необходимо приводить к типу вариантного массива при помощи функции VarArrayOf.

Options позволяет указать необязательные значения режимов поиска:

  • loCaseInsensitive – поиск ведется без учета высоты букв.

  • loPartialKey – запись считается удовлетворяющей условию поиска, если она содержит часть, удовлетворяющую критерию поиска. Например, удовлетворяющими критерию поиска 'Ма' будут признаны записи со значениями в искомом поле 'Машина', 'Макаров'.

Примеры:

1). Table1.Locate ('FIO', 'Ma', [loPartialKey]);

2). Table1.Locate('Doljnost;UchStepen', VarArrayOf (['доцент', 'кхн']), [loPartialKey]);

2. fun Lookup (const KeyFields: string, const KeyValues: Variant, const ResultFields: string): Variant – находит запись, удовлетворяющую условию, но не делает ее текущей, а возвращает значения некоторых полей этой записи. Тип результата – Variant или вариантный массив. Независимо от успеха поиска записи, указатель текущей записи в НД не изменяется. Поиск осуществляется только на точное соответствие критериям поиска. (Такой режим как loPartialKey метода Locate отсутствует). Поля, по которым ведется поиск, не обязаны быть индексными.

Параметры KeyFields и KeyValues имеют такое же назначение, как и в методе Locate.

Если запись не найдена, Lookup возвращает Null, что выявляется при помощи предложения IF VarType (LookupResults) = varNulI THEN ...

В противном случае Lookup возвращает из этой записи значения полей, указанных в ResultFields. При этом размерность результата зависит от того, сколько полей указано в ResultFields:

  1. Одно поле - результатом будет значение соответствующего типа или Empty, если поле в найденной записи содержит пустое значение.

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