Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНАЯ РАБОТА № 8_Часть1.doc
Скачиваний:
1
Добавлен:
25.11.2018
Размер:
309.25 Кб
Скачать

11.2.2. Компонент DataSource и компоненты отображения данных

Класс TDataSource обеспечивает канал связи, по которому компоненты доступа к данным могут подключаться к компонентам отображения данных.

Свойство State отображает текущее состояние связанного с ним набора данных, т. е. режиме, в котором находится таблица (вставки, редактирования, и др.).

Свойство DataSet используется для указания компонента, содержащего набор данных.

Упражнение 11.2.1. Создайте приложение для просмотра таблицы biolife.db.

Решение

1-й способ. Для отображения данных воспользуемся компонентом DBGrid.

1. новое приложение и сохраните его в папке BioLife 1 Файл модуля — под именем Main.pas, файл проекта — BioLiFel.dpr.

2. Из палитры компонентов страницы Data Access перенесите на форму компоненты Table и DataSource. Для отображения данных используем компонент TDBGrid со страницы Data Control.

3. Подготовка компонентов к отображению данных.

Установите свойство DataSource компонента DBGridl в значение DataSourcel (в выпадающем списке этого свойства перечислены все имеющиеся на форме источники данных).

4. Для связи компонентов DataSourcel и Table 1 определите значение свойства DataSet компонента DataSourcel равным Table1.

5. Присвойте свойствам компонента Tablel следующие значения:

DataBaseName - DBDemos

TableName - biolife.db

Active - True

Примечание. Установка свойств компонента Table производится только в указанном порядке: DataBase, TableName, Active. Перед изменением имени набора данных (имени таблицы) свойству Active присвойте значение False.

6. Запустите проект. Убедитесь, что полосы прокрутки позволяют просматривать все поля и записи таблицы. Что отображается в полях Graphic и Notes?

2-й способ. Для отображения данных воспользуемся компонентами со страницы DataControl таким образом, чтобы данные отображались не в таблице, а в отдельных полях на форме.

1. Создайте новое приложение, сохраните файлы проекта в папке BioLife_2 файл модуля под именем Main.pas, файл проекта -- BioLife_2.dpr.

2. Положите на форму четыре компонента DBEdit, четыре компонента Label и по одному компоненту DBImage, DBMemo, DataSource, Table

3. Выделите компоненты воспроизведения данных и установите значение свойства DataSource в DataSourcel.

4. Установите значения свойств компонентов следующим образом:

компонент

свойство

значение

DataSourcel

DataSet

Table 1

Table 1

DataBaseName

DBDEMOS

Table 1

TableName

Biolife.db

Table 1

Active

True

DBEditl

DataField

Category

DBEdit2

DataField

Common_Name

DBEditS

DataField

Length (cm)

5. Свойству Caption компонентов Label присвойте значение, равное свойству DataField соответствующего компонента DBEdit.

6. Запустите проект. Можно ли просмотреть все записи таблицы?

7. Для навигации по таблице используется компонент DBNavigator со страницы DataControl.

Положите на форму компонент DBNavigator

Компонент объединяет в себе ряд кнопок:

NbFirst

перемещение к первой записи;

NbPrior

перемещение к предыдущей записи;

NbNext

перемещение к следующей записи;

NbLast

перемещение к последней записи;

Nblnsert

вставка новой записи в место, указанное курсором;

NbDelete

удаление текущей записи;

NbEdit

редактирование текущей записи;

NbPost

внесение изменений после редактирования в БД;

NbCancel

отмена результатов редактирования или добавления новой записи;

NbRefresh

очистка буфера, связанного с набором данных.

Примечание. Для перемещения по записям таблицы можно воспользоваться методами компонента Table — First (на первую запись), Next (на следующую запись), Last (на последнюю запись), Pred (на предыдущую запись). Для определения начала и конца набора данных используются свойства EOF и BOF.

8. Для связи навигатора с набором данных установите свойство DataSource компонента DBNavigator в DataSourcel.

Для просмотра таблицы biolife необходимы кнопки NbFirst, NbPrior, NbNext, NbLast.

9. Удалите лишние кнопки навигатора, изменив значение свойства VisibleButtons (установите значение False для всех кнопок, кроме необходимых для работы приложения).

10. Запустите приложение. Убедитесь, что кнопки навигатора позволяют перемещаться по записям таблицы.

Чтобы грамотно оформить приложение, работающее с БД, необходимо добавить соединение с набором данных в момент начала работы и разорвать его в момент окончания.

11. Установите значение свойства Active компонента Table в False

12. Создайте обработчик события OnCreate формы:

procedure TForml.FormCreate (Sender: TObject);

begin

Tablel.Active := true

end;

13. В обработчике события OnDestroy формы напишите:

procedure TForml.FormDestroy(Sender: TObject);

begin

Tablel.Active := false;

end;

14. Запустите приложение. Убедитесь, что ничего не изменилось в функционировании приложения. +

3-й способ. Использование редактора полей.

Отображение данных на форме в отдельных полях можно сделать автоматически.

1. Создайте новое приложение, сохраните файлы приложения в каталоге BioLife_3, файл проекта под именем Main.pas, файл проекта -- BioLife_3.dpr.

2. Положите на форму компоненты DataSource и Table.

Измените значения свойств так же, как и при выполнении первого и второго способов.

3. Выполните двойной щелчок левой кнопкой мыши на компоненте Tablel, появится редактор полей. Щелкните правой кнопкой мыши и выберите из всплывающего меню Add all Fields.

4. В Инспекторе объектов измените свойство DisplayLabel каждого поля на значение, соответствующее заголовку, например, Notes — описание.

5. Из всплывающего меню выберите Select all. Перетащите поля на форму, в результате чего автоматически создаются компоненты, отображающие данные.

6. Положите на форму DBNavigator для перемещения по записям таблицы.

7. Запустите приложение. Убедитесь в работоспособности созданного приложения

Упражнение 11.2.2. Создайте приложение «Employees» для просмотра таблицы Employee базы данных DBDEMOS используя фильтрацию данных,

  1. отобразите только тех работников, у которых зарплата больше 40000;

  2. отобразите записи, поле EmpNo которых является двузначным числом;

  3. выведите всех сотрудников, чьи фамилии начинаются на букву «L».

Решение

1. Создайте новый проект. Сохраните файлы проекта в папке Employee.

2. Разработайте интерфейс приложения одним из трех описанных выше способов.

3. Запустите приложения, обратите внимание на количество отображаемых записей.

а) Фильтрация определяется свойствами Filter, Filtered, FilterOptions компонента Table.

В свойство Filter введите условие:

Salary > '40000',

так как нужно выбрать тех работников, у которых зарплата больше 40000.

Свойство Filtered установите в True.

4. Запустите приложение. Осталось ли прежним количество отображаемых записей?

При записи условий можно использовать операции отношения (>, <, =, >=, <=, <>) и логические операции (and, or, not). Например, фильтр

(FirstName = 'M*') and (Salary > '40000')

будет выводить людей, у которых имя начинается на букву «М» и зарплата больше 40000.

б) Процедура ApplyRange позволяет установить фильтр, который ограничивает диапазон записей для просмотра, используя индексированное поле.

В таблице Employee.db первое поле EmpNo является ключевым. Воспользуемся им для фильтрации данных.

Положите на форму кнопку «Фильтр», создайте обработчик события OnClick кнопки, в теле которого опишите такую последовательность действий.

Вызовите процедуру SetRangeStart и установите начала диапазона, используя свойство Fields:

Tablel.SeyRangeStart;

Table1.Fields[0].AsInteger:=10;

{самое маленькое двузначное число}

По умолчанию свойство Fields содержит значения строкового типа. Свойство Aslnteger позволяет преобразовать значение поля записи к целочисленному значению. Похожие свойства преобразуют значения полей к логическому (AsBollean), вещественному (AsFloat) и формату даты (AsDate).

Вызовите процедуру SetRangeEnd и установите начала диапазона, используя свойство Fields:

Tablel.SeyRangeEnd;

Tablel.Fields[0].Aslnteger:=99;

{самое большое двузначное число}

Вызовите команду ApplyRange для выполнения фильтра:

Tablel.ApplyRange;

Положите на форму кнопку «Отменить фильтр». Чтобы отменить результаты вызова ApplyRange, используйте метод CancelRange:

Tablel.CancelRange;

Запустите приложение. Отфильтрованы ли записи в соответствии с поставленным условием?

с) Фильтрация при помощи события OnFilterRecord.

Событие OnFilterRecord позволяет устанавливать фильтры на неключевых полях.

Создадим обработчик события OnFilteredRecord компонента Tablel:

procedure TForml.TablelFilterRecord(DataSet: TDataSet;

var Accept: Boolean);

begin

accept:=(tablel['LastName']>='L*')and(tablel['LastName']<'M*');

end;

Примечание. Для обращения к полю записи также можно воспользоваться способом, описанным выше:

accept := (tablel.Fields[1].AsString >= 'L*') and (tablel.Fields[1].AsString < 'M*');

Положите на форму компонент Checkbox. Измените свойство Caption на «Фильтр». Установка флажка будет приводить к фильтрованию записей, отмена флажка --к сбросу фильтра .

Создайте обработчик OnClick компонента CheckBox:

procedure TForml.CheckBoxlClick (Sender: TObject);

begin

Tablel.Filtered:=CheckBoxl.Checked;

end;

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

Задания для самостоятельного выполнения

1. Напишите приложение «Просмотрщик таблиц баз данных», позволяющее просматривать базы данных *.db, *.dbf. В заголовке формы должно отображаться название таблицы, а в строке — общее количество записей и номер текущей записи. Примечание. Для получения имени таблицы воспользуйтесь функцией ExtractFileName(<полное имя файла>), а для выделения пути до файла — ExtactFilePos(<полное имя файла>).

2. Создайте приложение, демонстрирующее решение упр. 11.2.1.2 каждым из описанных выше способов (если это возможно).

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

Примечание. Для отображения названий полей воспользуйтесь свойствами Tablel.FieldCount (количество полей таблицы) и Tablel.Fields[0].FieldName (возвращает имя первого поля набора данных).