Подключение к БД. Компоненты отображения данных.

Цели: Рассмотреть способ подключения приложения к таблицы базы данных.

Изучить три способа отображения данных таблицы в приложении.

Изучить возможности выполнения фильтрации записей (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;

Запустите приложение. Сколько записей таблицы сотрудников отображается?