КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Поиск в таблицеВ больших базах данных немыслимо выполнять корректировку и редактирование информации без средств поиска нужной записи. Проще всего выполнять подобный поиск с помощью метода function FindKey(const KeyValues: array of const): Boolean;
Параметр, называемый ключом поиска, описывает список значений для каждого из полей, указанных в свойстве IndexName или IndexFieldNames. Например, чтобы переместить указатель базы данных на запись таблицы Games, в которой значение поля Name равно ≪Blizzard≫, надо выполнить следующую команду: DataModule2.Games.FindKey(['Blizzard']);
При этом требуется, чтобы таблица Games была проиндексирована по полю Name и в качестве индекса в свойстве IndexName стояло название соответствующего вторичного индекса. Метод FindKey возвращает значение False, если найти подходящую запись не удалось. Для удобства пользователя неплохо добавить в приложение метод procedure FindNearest(const KeyValues: array of const);
Этот метод пытается найти запись, значение соответствующего поля которой если и не совпадает точно с параметром KeyValues, то, как минимум, ближе всего к нему. Например, к целому числу 5 ближе всего числа 4 и 6, к строке 'ДА' — строка 'АВ' и так далее. Данный метод практически всегда выполняется успешно, потому что любое значение будет относительноблизким указанному. ЗАМЕЧАНИЕНе рекомендуется злоупотреблять данным методом, потому что его выполнение может потребовать больших ресурсов. Ключ поиска можно также формировать с помощью метода procedure SetKey, Соответствующий способ напоминает формирование диапазона. После того как ключ поиска сформирован, можно перейти к нужной записи с помощью метода function GotoKey: Boolean; Переход к записи, похожей по значению, осуществляется с помощью метода procedure GotoNearest; Например: DataModule2.Games.SetKey,- DataModule2.Games.FieldByNarne ('Playability1).Aslnteger := 4; DataModule2.Games.GotoNearest;
Для поиска можно также использовать универсальные методы function Locate (const KeyFields:string; const KeyValues: Variant; Options: TLocateOptions): Boolean; function Lookup (const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant;
Первый метод получает в качестве параметров список полей, по которым будет выполняться поиск, список значений для каждого из полей и набор вспомогательных настроек поиска (тип TLocateOptions). Например, поиск значения 5 в индексированном поле Playability может выполняться следующим образом. DataModule2.Games.Locate('Playability1, VarArrayOf([5]), []); Обратите внимание на то, как множество [5] преобразуется к типу Variant. Второй метод в дополнение к поиску возвращает массив значений полей (типа Variant), названия которых указаны в параметре ResultFields. DataModule2.Games.Lookup('Playability1 , VarArrayOf([5]), 'Sound');
|