Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа7.doc
Скачиваний:
5
Добавлен:
06.11.2018
Размер:
461.82 Кб
Скачать

If Table1.Locate ('Number',123,[]) {опции поиска отключены}

then ShowMessage('Запись не найдена!')

Table1.Locate ('Name;Post', VarArrayOf (['П', 'Инженер']), [loCaseInsensitive, loPartialKey]);

{поиск всех инженеров с фамилией начинающейся на "П"}

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

Поиск с псевдофильтрацией осуществляется при заданном свойстве Filter, но отключенном значении свойства Filtered. Для перехода от одной записи к другой используются методы FindFirst, FindPrior, FindNext и FindLast, которые перемещают указатель текущей записи соответственно на первую, предыдущую, следующую и последнюю записи, удовлетворяющей условию фильтра.

Поиск по индексным полям в Delphi можно организовать и другими процедурами, но перед их использованием следует сначала установить в качестве текущего индекс, построенный по используемым для поиска полям.

Функция FindKey выполняет поиск записи, у которой значения индексных полей в точности совпадают со значениями указанными в параметре функции. Если удовлетворяющие условиям поиска записи существуют, то текущей становится первая из них и функция возвращает значение True, иначе – значение False и смены текущей записи не происходит. Пример:

Table1.IndexFieldNames:='Group;Name';{выбираем индекс}

If not Table1.FindKey([EditGroup.Text,EditName.Text]){ищем соответствующие значения}

then ShowMessage('Запись не найдена!')

Процедура FindNearest, в отличие от FindKey, может найти запись, значения которой только частично совпадает со значениями, заданными для поиска. Сравнение проводится, начиная с первого стоящего в поле символа. Поиск с помощью FindNearest всегда является успешным и перемещает указатель текущей записи на запись, в наибольшей степени отвечающую условиям поиска. Правила использования процедуры ее параметр совпадают с функцией FindKey.

Вместо методов FindKey и FindNearest можно использовать соответствующие наборы команд {SetKey, EditKey, GotoKey} и {SetNearest, EditNearest, GotoNearest} – результат их работы тот же, но использование их менее удобно.

    1. Связывание таблиц

Как правило, таблицы в БД связаны между собой. Связываются таблицы по полям связи, которые обязательно должны быть индексными. Связь между таблицами определяет отношение подчиненности, при котором дона таблица является главной, а вторая – подчиненной. После установления связи при изменении текущей записи в главной таблице – в подчиненной таблице автоматически становятся доступны записи, у которых значение поля связи равно значению поля связи текущей записи главной таблицы. Такой отбор записей для подчиненной таблицы является своего рода фильтрацией.

Для установления связи в подчиненной таблице используются следующие свойства:

  • MasterSource – источник данных (имя компонента DataSource) главной таблицы;

  • IndexName – текущий индекс подчиненной таблицы (как правило, является главным и не указывается);

  • IndexFieldName – поле (или поля разделенные точкой с запятой) связи индекса подчиненной таблицы;

  • MasterFields – поле (или поля разделенные точкой с запятой) связи индекса главной таблицы

Последние три свойства можно задать в Редакторе полей связи, который можно запустить, дважды щелкнув мышкой на поле свойства MasterFields набора данных в Object Inspector (поле MasterSource должно быть уже заполнено).