Создание и заполнение базы данных "Напитки", страница 2

На рисунках 7-10 представлена основная форма, по средствам которой происходит отображение данных хранимых в базе, манипуляции с этими данными, а также формирование запросов по заданию.

Также в проекте используются формы для задания отдельных запросов, вызываемые из меню, они представлены на рисунке 6.

Рис.6 Формы, вызываемые из меню

Рис.7 Основная форма «Напитки», вкладка первая

Рис.8 Основная форма «Напитки», вкладка вторая

Рис.9 Основная форма «Напитки», вкладка третья

Рис.10 Основная форма «Напитки», вкладка четвертая

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

Первая (большая синяя) видна независимо от выбранной вкладки. В этой таблице отображаются записи локального представления Drinks_view. Для перемещения по таблице в форме предусмотрены кнопки, расположенные непосредственно под ней.

На первой вкладке имеются кнопки редактирования записей в таблице. При этом изменения вносятся в таблицу Drink_info, а значит и в представление Drinks_view.

Вторая таблица, расположенная на третьей вкладке отображает записи  Drink_sale. Непосредственно под ней расположены кнопки перемещения и редактирования.

Также редактирование записей можно вызывать из контекстного меню, всплывающего по нажатию правой кнопки мыши в любой части таблицы (смотри рисунок 9 и 10), либо из основного меню (рисунок 11).  

Для своевременного отображения изменений внесенных в таблицу была создана функция, вызываемая при обновлении формы Refresh: thisform.grid_assort.setfocus().

Для активизации основного меню создана функция, вызываемая при инициализации основной формы Activate Event: do main_menu.mpr.

Возврат к стандартному меню происходит по средствам функции, вызываемой при уничтожении формы Destroy Event:  set sysmenu to default.

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

Рис.11 Основное меню приложения

SQL - Код

Для реализации заданных запросов были написаны следующие процедуры на языке SQL:

Для каждого вида напитка выдать список, отсортированный: по году выпуска, в алфавитном порядке, по емкости, по стоимости.

set safety off

do case

case thisform.pageframe1.page1.optiongroup1.value==1

     index on drinks_view.made_date to drinks

case thisform.pageframe1.page1.optiongroup1.value==2

     index on drinks_view.name to drinks

case thisform.pageframe1.page1.optiongroup1.value==3

     index on drinks_view.cap to drinks

case thisform.pageframe1.page1.optiongroup1.value==4

     index on drinks_view.cost to drinks

endcase

thisform.refresh()

set safety on

Найти самый дорогой напиток, самый дешевый, среднюю стоимость. Найти напитки с ценой выше заданной с клавиатуры.

SELECT MAX(drinks_view.cost), MIN(drinks_view.cost), AVG(drinks_view.cost);

FROM  DRINK_DATABASE!DRINKS_VIEW DRINKS_VIEW into array max_min_avg;

do case

case thisform.pageframe1.page1.optiongroup2.value==1

SELECT drinks_view.kind AS "Тип",;

       drinks_view.name AS "Наименование",;

       YEAR(drinks_view.made_date) AS "Год_выпуска",;

       drinks_view.country AS "Страна_изготовитель",;

       drinks_view.cap AS "Емкость",;

       drinks_view.cost AS "Цена";

FROM  DRINK_DATABASE!DRINKS_VIEW DRINKS_VIEW;

WHERE Drinks_view.cost = max_min_avg(1)

thisform.pageframe1.page1.text1.value=max_min_avg(1)

case thisform.pageframe1.page1.optiongroup2.value==2

SELECT drinks_view.kind AS "Тип",;

       drinks_view.name AS "Наименование",;

       YEAR(drinks_view.made_date) AS "Год_выпуска",;

       drinks_view.country AS "Страна_изготовитель",;

       drinks_view.cap AS "Емкость",;

       drinks_view.cost AS "Цена";

FROM  DRINK_DATABASE!DRINKS_VIEW DRINKS_VIEW;

WHERE Drinks_view.cost = max_min_avg(2)

thisform.pageframe1.page1.text1.value=max_min_avg(2)

case thisform.pageframe1.page1.optiongroup2.value==3