Подключение к БД. Компоненты отображения данных.
Цели: Рассмотреть способ подключения приложения к таблицы базы данных.
Изучить три способа отображения данных таблицы в приложении.
Изучить возможности выполнения фильтрации записей (3 способа)
Ход работы
Класс TDataSource обеспечивает канал связи, по которому компоненты доступа к данным могут подключаться к компонентам отображения данных.
Свойство DataSet используется для указания компонента, содержащего набор данных.
Упражнение 1. Создать приложение для просмотра таблицы Biolife.db.
1-й способ. Для отображения данных воспользуемся компонентом DBGrid.
Из палитры компонентов Data Access перенести на форму компоненты Table и DataSource. Для отображения данных используем компонент DBGrid со страницы Data Control.
Подготовка компонентов к отображению данных.
Установите свойство DataSource компонента DBGrid1 в значение DataSource1.
Установите значение свойства DataSet Компонента DataSource1 равным Table1.
Присвойте свойствам компонента Table1 следующие значения:
DataBaseName DBDemos
TableName biolife. db

Active True
В результате должно получиться приложение следующего вида:
Запустите проект. Убедитесь, что полосы прокрутки позволяют просматривать все поля и записи таблицы. Что отображается в полях Graphic и Notes?
2-й способ. Для отображения данных воспользуемся компонентами со страницы DataControls таким образом, чтобы данные отображались в отдельных полях на форме.
Положите на форму четыре компонента DBEdit, четыре компонента Label и по одному компоненту DBImage, DBMemo, DataSource, Table. Выполните подключение к таблице базы данных как в 1-м способе.
Выделите компоненты отображения данных и установите значение их свойства DataSource в DataSource1.
Настройте свойства компонентов следующим образом:
компонент | свойство | значение |
DataSource1 | DataSet | Table1 |
Table1 | DataBaseName | DBDemos |
TableName | biolife. db | |
Active | True | |
DBEdit1 | DataSource | DataSource1 |
DataField | Category | |
DBEdit2 | DataSource | DataSource1 |
DataField | Common_Name | |
DBEdit3 | DataSource | DataSource1 |
DataField | Length(cm) | |
DBEdit4 | DataSource | DataSource1 |
DataField | Length_In | |
DBMemo1 | DataSource | DataSource1 |
DataField | Notes | |
DBImage1 | DataSource | DataSource1 |
Stretch | True | |
DataField | Graphic |

Запустите проект. Можно ли просмотреть все записи таблицы?
Для навигации по таблице используется компонент DBNavigator со страницы DataControls.
Компонент объединяет в себе ряд кнопок:
NbFirst к первой записи
NbPrior к предыдущей записи
NbNext к следующей записи
NbLast к последней записи
NbInsert вставка новой записи
NbDelete удаление текущей записи
NbEdit редактирование текущей записи
NbPost внесение изменений после редактирования в БД
NbCancel отмена результатов редактирования
![]() |
NbRefresh очистка буфера, связанного с набором данных
Для связи навигатора с набором данных установите свойство DataSource компонента DBNavigator в DataSource1.
Для просмотра таблицы необходимы лишь кнопки NbFirst, NbPrior, NbNext, NbLast.
Запустите проект. Убедитесь, что кнопки навигатора позволяют перемещаться по записям таблицы.
Чтобы грамотно оформить приложение, работающее с БД, необходимо добавить соединение с набором данных в момент начала работы и разорвать его в момент окончания.
Установите значение свойства Active компонента Table В значение False.
Создайте обработчик события OnCreate формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Active:=true
end;
Создайте обработчик события OnDestroy формы:
procedure TForm1.FormDestroy(Sender: TObject);
begin
Table1.Active:=false
end;
3-й способ. Использование редактора полей.
Выполните подключение к данным таблицы той же БД.
Выполните двойной щелчок на компоненте Table1, появится редактор полей. В его контекстном меню выберите Add all Fields.


В инспекторе объектов измените свойство DisplayLabel каждого поля на значение, соответствующее заголовку, например, Notes – описание.
Из всплывающего меню выберите Select all. Перетащите поля на форму, в результате чего автоматически создаются компоненты, отображающие данные.
Положите на форму DBNavigator для перемещения по записям таблицы.
Запустите проект, убедитесь в его работоспособности.
Упражнение 2. Создайте приложение для просмотра таблицы Employee базы данных DBDemos. Используя фильтрацию данных:
1. отобразите только тех работников, у которых зарплата больше 40000
2. отобразите записи, поле EmpNo которых начинается двузначным числом
3. выведите всех сотрудников, чьи фамилии начинаются на букву “L”.
Решение
Создайте новый проект. Разработайте интерфейс приложения одним из трех описанных способов. Запустите приложение, обратите внимание на количество отображаемых записей.
1. Фильтрация определяется свойствами Filter, Filtered компонента Table.
В свойство Filter введите условие: Salary > ‘40000’. Свойство Filtered установите в True.
Запустите приложение. Осталось ли прежним количество отображаемых записей?
При записи условий можно использовать операции отношения (>, <, =, >=, <=, <>) и логические операции (and, or, not).
Измените фильтр так, чтобы выводились сотрудники, фамилия которых начинается на букву ‘B’ и зарплата больше 40000. (LastName = ‘B*’)
2. Процедура ApplyRange позволяет установить фильтр, который ограничивает диапазон записей для просмотра, используя индексированное поле.
В таблице БД первое поле EmpNo является ключевым. Воспользуемся им для фильтрации данных. Положите на форму кнопку «Фильтр», в обработчике события OnClick опишите последовательность действий:
Установите начало диапазона, используя свойство Fields:
Table1.SetRangeStart;
Table1.Fields[0].AsInteger:=10; //самое маленькое двузначное число
По умолчанию свойство Fields содержит значения строкового типа. Свойство AsInteger позволяет преобразовать значение поля записи к целочисленному значению. Похожие свойства преобразуют значения полей к логическому (AsBoolean), вещественному (AsFloat) и формату даты (AsDate).
Вызовите процедуру SetRangeEnd и установите конец диапазона:
Table1.SetRangeEnd;
Table1.Fields[0].AsInteger:=99; //самое большое двузначное число
Вызовите команду ApplyRange для выполнения фильтра.
Table1.ApplyRange;
Положите на форму кнопку «Отменить фильтр». Используйте метод CancelRange:
Table1.CancelRange
Запустите приложение. Отфильтрованы ли записи в соответствии с заданием?
3. Фильтрация при помощи события OnFilterRecord.
Это событие позволяет устанавливать фильтры на неключевых полях. Создадим обработчику события OnFilterRecord компонента Table1:
procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=(Table1['LastName']>='L*') and (Table1['LastName']<'M*');
end;
Примечание: для обращения к полю записи также можно воспользоваться способом, описанным выше:
Accept:=(Table1.Fields[1].AsString>='L*') and (Table1.Fields[1].AsString<'M*');
Положите на форму компонент CheckBox. Измените свойство Caption на «Фильтр». Установка флажка будет приводить к фильтрованию записей, отмена флажка – к сбросу фильтра. Создайте обработчик:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Table1.Filtered:=CheckBox1.Checked
end;
Запустите приложение. Сколько записей таблицы сотрудников отображается?



