Занятие 4. Разработка главной формы программы
Главная форма приложения, как правило, предназначается для выполнения основной задачи пользователя. В нашем случае это создание накладной и перечня продаваемых товаров для определенного покупателя, включая подсчет общей стоимости проданных товаров.
1. Для решения этой задачи разместим:
a. в модуле данных DM:
- компонент TZTable ( Name = Nakladn; TableName = NAKL; MasterSource = DSPokup; MasterFields = IDPOKUP; LinkedFields = IDPOKUP ),
- два компонента TDataSource с именами DSNakl и DSOtpusk;
- компоненты TZQuery ( Name=Otpusk ) и TZUpdateSQL ( Name=OtpUpdSQL )
b. на форме следующие компоненты:
- компонент TDBText ( DataSource=DM.DSPokup; dataField = POKUPNAME ).
- компонент TDBNavigator ( DataSource=DM.DSPokup )
- два компонента DBGrid и соответствующие им два TDBNavigator, задав им свойства DataSource = DM.DSNakl и DataSource = DM.DSOtpusk соответственно.
Таблицу Nakladn подключите как дочернюю к таблице Pokupatel.
В компоненте TZQuery свойство TableName отсутствует, зато есть два важных свойства – SQL и UpdateObject.
2. Раскройте выпадающий список свойства UpdateObject и выберите OtpUpdSQL.
В этом случае данные ZQuery можно будет редактировать. Если же свойство UpdateObject не определено ( UpdateObject := null ), то данные ZQuery можно будет только читать.
Значение свойства SQL типа TStrings задается в редакторе многострочного текста, как показано на рис. 18:
Рисунок 18. SQL – оператор выборки данных компонента ZQuery
3. Введите текст SQL – запроса, как показано на рис. 18
Обратите внимание на фрагмент SQL – оператора:
where NAKLNOM = :NAKLNOM
Вводя в текст запроса :NAKLNOM мы создали параметр с именем NAKLNOM, свойства которого нужно отредактировать в Object Inspector (рис. 19).
4. Задайте свойства DataType=ftInteger, ParamType=ptInput, Size=4 параметра NAKLNOM так, как показано на рис.
Внимание: между двоеточием и именем параметра пробелов нет.
Если имя параметра (NAKLNOM) совпадает с именем поля в составе первичного ключа компонента родительской таблицы, то реализуется связь Master – Detail, такая же, как в случае компонент TZTable. Однако возможно создавать и другие, дополнительные параметры, значения которых задаются программно перед активизацией TZQuery.
Чтобы сделать TZQuery Otpusk редактируемым набором, нужно задать его свойства InsertSQL, ModifySQL, DeleteSQL и RefreshSQL. Если текст SQL – запроса в компоненте TZQuery Otpusk, то:
5. Выделите в модуле DM компонент TZUpdateSQL OtpUpdSQL и щелчком правой кнопки мыши вызовите контекстное меню, в котором выберите UpdateSQL Editor. Окно диалога приведено на рисунке:
Рисунок 20. Диалог построения DML – операторов компонента ZUpdateSQL
В таблице OTPUSK первичный ключ состоит из двух полей: IDTOV и NAKLNOM. Выделите их в списке Key Fields, а в Update Fields – все поля таблицы. Нажмите кнопку "Generate SQL". Конструктор генерирует соответствующие SQL – операторы для вставки, изменения и удаления данных, которые приведены на рис. 21:
Рисунок 21. Созданные в диалоге компонента ZUpdateSQL
операторы вставки, изменения, удаления и обновления данных
Сохраните проект, а затем запустите на выполнение. Теперь Вы можете вводить новые, редактировать и удалять записи в таблицах NAKL и OTPUSK базы данных, как показано на рис. 22:
Рисунок 22. Создание новой накладной и отпуск товаров в окне приложения
Приложение 1. Дополнительные данные для ввода в БД:
Для проверки работоспособности созданного Вами приложения, добавьте в таблицы базы данных следующую информацию. Оцените, насколько удобно пользоваться Вашей программой.
Накладная № 124 | ||||
Дата | Покупатель: | Адрес | ||
10.02.2002 | ООО "Алла" | Г. Одесса, ул. Пушкинская,35, тел. 23-71-63 | ||
товар | количество | ед. измер. | цена | стоимость, грн. |
Тушенка | банок | 4,78 | ||
Сахар | кг | 3,15 | ||
Макароны | кг | 1,40 | ||
Пепси-кола | банка | 1,67 | 133,6 | |
Печенье | кг | 5,15 | 51,5 | |
Итого | 732,1 |
Накладная № 125 | ||||
Дата | Покупатель: | Адрес | ||
14.02.2002 | ТОО "Геракл" | Г. Одесса, ул. Терешковой, 25, тел. 68-77-86 | ||
товар | количество | ед измер. | цена | стоимость, грн. |
Тушенка | банок | 4,78 | 382,4 | |
Сахар | кг | 3,15 | ||
Макароны | кг | 1,40 | ||
Пепси-кола | банка | 1,67 | 350,7 | |
Печенье | кг | 5,15 | 257,5 | |
Итого | 1634,6 |
Накладная № 126 | ||||
Дата | Покупатель: | Адрес | ||
15.02.2002 | ООО "Алла" | Г. Одесса, ул. Пушкинская,35, тел. 23-71-63 | ||
товар | количество | ед измер. | цена | стоимость, грн. |
Тушенка | банок | 4,78 | 382,4 | |
Сахар | кг | 3,15 | ||
Макароны | кг | 1,40 | ||
Пепси-кола | банка | 1,67 | ||
Печенье | кг | 5,15 | 257,5 | |
Итого | 1205,9 |
Накладная № 127 | ||||
Дата | Покупатель: | Адрес | ||
16.02.2002 | ЧП "Никита" | Г. Южный, ул. Средняя, 45, тел. 46-87-883 | ||
товар | количество | ед измер. | цена | стоимость, грн. |
Тушенка | банок | 4,78 | 573,6 | |
Сахар | кг | 3,25 | ||
Макароны | кг | 1,40 | ||
Конфеты | кг | 8,75 | ||
Печенье | кг | 5,80 | ||
Итого | 1600,6 |
Накладная № 128 | ||||
Дата | Покупатель: | Адрес | ||
16.02.2002 | ЧП "Никита" | Г. Южный, ул. Средняя, 45, тел. 46-87-883 | ||
товар | количество | ед. измер. | цена | стоимость, грн. |
Сардины в масле | банки | 3,78 | 453,6 | |
Крупа гречневая | кг | 3,25 | ||
Макароны | кг | 1,40 | ||
Красный мак | кг | 8,75 | ||
Вода Куяльник | бутылки | 1,80 | ||
Итого | 1220,6 |
Литература:
1. Меркт Р.В., Рублев И.С., Кутяков Д. В. Реляционные базы данных. ER - модели баз данных. Учебное пособие к лабораторным работам. ОНМУ, 2008
2. Рублев И.С., Кутяков Д. В. Реляционные базы данных. СУБД InterBase. Методические указания к лабораторным работам. ОНМУ, 2008
3. Рублев И.С., Кутяков Д. В. Распределенные и сосредоточенные СУБД. Конспект лекций. ОНМУ, 2005