Лабораторная работа № 3
Тема: Работа с таблицей заказов, ввод данных по заказам.
Цель: Использование средств Delphi для облегчения работ со связанными таблицами (таблицы заказов).
Контрольный пример:
1. На Form2 разместим новую страницу PageControl, на которую поместим два компонента DBGrid и такое же количество DBNavigator.
2. Перейдем в DataModule и, используя раздел DataAccess, по три элемента для каждой таблицы (Заказ фирмы и Заказ товара): Table, Query, DataSource.
3.Выполним настройки свойств элементов, созданных для таблицы z_f. DB (Заказ фирмы). Компоненту Table укажем следующие свойства:
DataBaseName - укажем имя базы, используемой в проекте (Zakaz_v1)
TableName – z_f. DB
Active – true
4. Будем использовать компонент Query для того, чтобы визуально в таблицы отображались наименования фирм, а хранились их коды. Настроим следующие свойства компонента:
DataBaseName – zakaz_v1
SQL – Select * from z_f. DB
Requestlive - true (устанавливаем возможность редактирования данных)
5. Чтобы визуальное отображение наименований фирмы было возможно, необходимо определить соответствующие поля в Query. Для этого выполним следующие действия:
- Дважды щелкнем мышью по компоненту Query В открывшемся окне диалога вызовем контекстное меню правой клавишей мыши Выберем пункт Add Fields и укажем поля для запроса (можно все) Так как собственные поля таблице не предполагают отображение реальных названий фирм, то, используя контекстное меню, добавим новое поле в Query (New Field…) В открывшемся окне диалога укажем следующие свойства поля:
Name – можно указать произвольное имя (напр., Firma)
Type – здесь указывается тип поля, которое предполагается отображать. Укажем, что поле текстовое
Field type – Lookup (связывает с источником данных и образует выпадающие списки)
Key Fields – ID_Firma (ключевое поле для связи в текущей таблице)
Dataset – firma (имя таблицы в DataModule, которая будет служить источником данных)
Lookup Keys – ID_firma (ключевое поле для связи в таблице-источнике)
Result Fields – Firma (отображаемое поле)

Рис. 1. Добавление нового поля
- Для поля ID_Firma в запросе установим свойство Visible – False, т. к. наличие этого поля на форме теперь не является обязательным.
6. Компоненту DataSource укажем в свойстве DataSet – Query1 (только что созданный запрос). Свойству Active (компонента Query1) – True.
7. Вернемся на Form2 и установим для компонентов DBGrid и DBNavigator свойство DataSource. Результат проделанных действий приведен на рис. 2.

Рис.2. Страница заказов
Индивидуальное задание (самостоятельно):
1. Выполните для таблицы «Заказы товара» (z_t. DB) те же действия, что и для «Заказы фирм». То есть, чтобы вместо кода товара отображалось его наименование.
2. Поверьте работоспособность приложения. Внесите данные.
3. В созданном проекте таблица Z_T. DB (Заказы товара) отображает данные для всех заказов, вне зависимости от выбранного заказа в таблице Z_F. DB. Для того, чтобы установить соответствие между заказом и товарами в заказе необходимо несколько изменить настройки компонентов:
- Изменить свойство SQL компонента Query2 (для таблицы Z_T. DB)
select * from z_t. db where id_zakaz=:ID_zakaz
где id_zakaz – поле из таблицы z_t. DB, а ID_zakaz – поле из таблицы z_f. DB
- Изменить свойство DataSource компонента Query2 (для таблицы Z_T. DB) – DS_q1 (DataSource для запроса Query1, связанного с таблицей Z_F. DB).
4. Добавьте новый пункт в меню «Ввод данных» для перехода на закладку «Заказы». Колонки таблиц (компоненты DBGrid) сделайте русскоязычными. Если есть необходимость, установите порядок колонок следующий: «Код заказа», «Наименование товара (фирмы)», «Количество» (или «Дата»). Колонки «Код фирмы» или «Код товара» не должны отображаться.
5. Варианты 1 и 10 сделайте аналогичный запрос с подстановкой для своих таблиц.


