Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы РЭУБД общий файл от 3.04 .docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
617.59 Кб
Скачать

32. Поиск информации методами SetKey (или EditKey) и GotoKey.

Установка поиска осуществляется методом SetKey при этом поля, по которым ведётся поиск должно быть явно проиндексированым, если поиск ведётся по нескольким полям необходимо использовать составной индекс.

with Table1 do begin   IndexName:='S1';   SetKey;   FieldByName('magaz').AsString:=Edit1.Text;   FieldByName('napit').AsString:=Edit2.Text; end;

При этом все сделанные установки поиска очищаются. Редактирование поиска осуществляется методом EditKey при этом сделанные ранее установки кода неочищаются. После сделанных установок сам поиск осуществляется либо GotoKey: Boolean;(точный поиск) либо процедурой GotoNearest (приближённый поиск)

33. Поиск информации методами FindKey и FindNearest.

Метод FindKey()

Метод FindKey() класса TTable позволяет искать  запись, по одному или несколь ким ключевым полям при одном вызове  функции. В качестве параметра методу Find- Key() передается массив типа  array of const, содержащий критерии поиска.  Если поиск  прошел успешно,  то метод  возвращает значение True. Например, следующий оператор осуществит переход к записи в наборе данных, где первое поле  в индексе имеет значение 123, а второе содержит строку Hello:

if not Table1.FindKey([123, 'Hello']) then MessageBeep(0);

Если поле не найдено, то метод FindKey() возвращает значение False и компью

тер издает  звуковой сигнал.

Ближайшее соответствие

Аналогично работает метод  FindNearest() или  пара  методов SetKey()..Goto- Nearest(), которыми можно  пользоваться для поиска  в таблице значения, наиболее близко  соответствующего критерию поиска.  Для  поиска  первой записи, где значение первого индексированного поля  наиболее близко  (больше или  равно) числу  123, ис пользуйте следующий код:

Table1.FindNearest([123]);

И снова  в качестве аргумента методу FindNearest() передается массив типа  ar- ray of const, содержащий значения полей, по которым выполняется поиск.

Методы  SetKey()..GotoNearest() можно  использовать для поиска  следующим образом:with Table1 do begin

SetKey;

Fields[0].AsInteger := 123;

GotoNearest;

end;

Если поиск  завершится успешно  и свойство KeyExclusive объекта таблицы имеет значение False, то указатель  текущей  записи  будет установлен на первую  из записей, соответствующих критерию  поиска.   Если  свойство  KeyExclusive имеет   значение True, то текущей  станет та запись, которая следует за последней из всех записей, соот ветствующих условию поиска.

34.Поиск информации методом Locate и Lookup.

Locate

Этот универсальный метод поиска устанавливает текущую запись как первую строку, удовлетворяющую набору критериев поиска. Используя метод Locate мы можем искать значения одного или более полей, расположенных в массиве переменных. В приведённом ниже коде, метод Locate ищет первую запись, содержащую строку "Zoom" в поле "Name". Если вызов Locate возвращает True - то запись найдена и установлена как текущая.

AdoTable1.Locate("Name","Zoom",[]);

{...или...}

var ffield, fvalue: string;

opts : TLocateOptions;

ffield := "Name";

fvalue := "zoom";

opts := [loCaseInsensitive];

if not AdoTable1.Locate(ffield, fvalue, opts) then

ShowMessage(fvalue + " not found in " + ffield);

Lookup

Метод Lookup не перемещает курсор в соответствующую строку, а только возвращает её значение. Lookup возвращает массив переменных, содержащих значения из полей, указанных в разделённом точкой с запятой списке имён, значения которых должны быть возвращены из интересующей нас строки. Если соответствующих нашему запросу строк не найдено, то Lookup вернёт пустую (Null) переменную.

Следующий пример заполняет заполняет массив переменных LookupRes

var LookupRes: Variant;

LookupRes := ADOTable1.Lookup

("Name", "Zoom", "Author; Description");

if not VarIsNull(LookupRes) then

ShowMessage(VarToStr(LookupRes[0])) //имя автора

Одно из преимуществ методов Locate и Lookup, состоит в том, что они не требуют, чтобы таблица была проиндексирована. Однако, функция Locate будет работать намного быстрее, если таблица будет проиндексирована.