Обработка исключительных ситуаций. Последовательный доступ к данным с использованием технологии BDE, страница 12

Компонент DBGrid (страница DataControls палитры компонентов) представляет данные в виде таблицы. В столбцах таблицы размещаются поля набора данных, а в строках – записи. Связь с набором данных устанавливается значением DataSource1 (2, 3 или 4) для свойства DataSource. Итак, надо установить четыре таких компонента.

Поместим в окно формы четыре компонента DBNavigator (страница DataControls палитры компонентов) для перемещения по записям каждого из наборов данных. Связь с набором данных устанавливается значением DataSource1 (2, 3 или 4) для свойства DataSource.

Наконец, поместим в окно формы компонент ADODataSet1, который обеспечит ввод значений внешнего ключа в подчиненную таблицу из списка значений первичного ключа главной таблицы. Установим в значение ADOConnection1 для свойства Connection.

Заметим, что при выполнении проекта в окне приложения из перечисленных выше компонентов будут видны только DBGrid и DBNavigator.

3.    Ввод информации в таблицы, не содержащие внешних ключей. Запустим проект на выполнение и с помощью кнопок компонента DBNavigator занесем пять записей в таблицу Клиенты и восемь записей в таблицу Товары (см. рис. 34). Завершим выполнение проекта и убедимся в СУБД Access, что вся информация, введенная при выполнении проекта СП Delphi, занесена в таблицы БД.


Рисунок 34Занесение информации в БД с использованием навигатора

4.    Создание процедур для ввода значений внешних ключей. В нашей базе данных три внешних ключа:

1)    поле КодКл в таблице Заказы – значения этого поля должны выбираться из поля КодКл таблицы Клиенты;

2)    поле НомЗак в таблице СтрокиЗаказов – значения этого поля должны выбираться из поля НомЗак таблицы Заказы;

3)    поле КодТов в таблице СтрокиЗаказов – значения этого поля должны выбираться из поля КодТов таблицы Товары.


Для создания списков значений первичных ключей и занесения информации из них в поля внешних ключей создадим процедуру ObnovlenieSpiska. Заголовок процедуры надо поместить в интерфейсную часть модуля (см. рис. 35), а текст ее в исполняемую часть модуля (см. рис. 36).

Рисунок 35Описание процедуры в интерфейсной части модуля


Рисунок 36Процедура обновления списков для внешних ключей


Запуск процедуры ObnovlenieSpiska надо выполнять при возникновении следующих событий:

1)  при активации формы;

2)  при изменении значений поля КодКл в таблице Клиенты – в этом случае надо после обновления списка обновить содержимое таблицы Заказы;

3)  при изменении значений поля КодТов в таблице Товары – в этом случае надо после обновления списка обновить содержимое таблицы СтрокиЗаказов;

4)  при изменении значений поля НомЗак в таблице Заказы – в этом случае надо после обновления списка обновить содержимое таблицы СтрокиЗаказов.

Таким образом, необходимо создать следующие три процедуры:

1)  процедуру Form1Activate, вызываемую при активации формы;

2)  процедуру ADOTable1AfterDelete, вызываемую при удалении (AfterDelete) или после редактирования (AfterPost) информации в таблице Клиенты (ADOTable1);

3)  процедуру ADOTable2AfterDelete, вызываемую при удалении (AfterDelete) или после редактирования (AfterPost) информации в таблице Товары (ADOTable2), а также при аналогичных действиях в таблице Заказы (ADOTable3).


Тексты перечисленных процедур приведены на рис. 37.

Рисунок 37Процедуры, вызывающие обновление списков для внешних ключей

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


38.