- •Базы данных.
- •Проектирование базы данных
- •Шаги проектирования базы данных
- •Создание таблиц базы данных
- •Компоненты для работы с бд
- •Создание простейшего приложения
- •Режимы наборов данных
- •Команды навигации
- •Визуальные компоненты для работы с данными
- •Обзор компонент
- •Работа с полями таблицы
- •Создание статических полей
- •Задание ограничений на вводимые значения
- •Компонент Table
- •Сортировка и фильтрация
- •Поиск записей
- •If Table1.Locate ('Number',123,[]) {опции поиска отключены}
- •If not Table1.FindKey([EditGroup.Text,EditName.Text]){ищем соответствующие значения}
- •Связывание таблиц
- •Компонент Query
- •Чтение данных из таблиц (select)
- •Модификация записей (update, insert, delete)
- •Insert into Tovar.Db (Name, Price, Count) values (’Яблоки’, 20, 10)
- •Некоторые функции языка sql
- •Компоненты для построения отчетов
- •Основные свойства компоненты QuickRep
- •Методы компоненты QuickRep:
- •Свойства компоненты qrBand:
- •Создание простого отчета
- •Включение выражений в отчет
- •Отображение системной информации
- •Группировка данных в отчете
- •Построение отчета для связанных наборов данных
- •Комбинированный отчет
- •Упражнения:
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} – результат их работы тот же, но использование их менее удобно.
-
Связывание таблиц
Как правило, таблицы в БД связаны между собой. Связываются таблицы по полям связи, которые обязательно должны быть индексными. Связь между таблицами определяет отношение подчиненности, при котором дона таблица является главной, а вторая – подчиненной. После установления связи при изменении текущей записи в главной таблице – в подчиненной таблице автоматически становятся доступны записи, у которых значение поля связи равно значению поля связи текущей записи главной таблицы. Такой отбор записей для подчиненной таблицы является своего рода фильтрацией.
Для установления связи в подчиненной таблице используются следующие свойства:
-
MasterSource – источник данных (имя компонента DataSource) главной таблицы;
-
IndexName – текущий индекс подчиненной таблицы (как правило, является главным и не указывается);
-
IndexFieldName – поле (или поля разделенные точкой с запятой) связи индекса подчиненной таблицы;
-
MasterFields – поле (или поля разделенные точкой с запятой) связи индекса главной таблицы
Последние три свойства можно задать в Редакторе полей связи, который можно запустить, дважды щелкнув мышкой на поле свойства MasterFields набора данных в Object Inspector (поле MasterSource должно быть уже заполнено).