Занятие 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