Лабораторная работа №5 (6 часов)

Цель работы: научиться создавать простые приложения: формы для редактирования таблиц и отчеты на основе SQL-запроса.

Теория с примером.

В качестве примера рассмотрим фрагмент схемы из лабораторной работы №3.

Лирическое отступление №1.

Нетрудно заметить, что в данном фрагменте схемы таблица RASP отличается от рассмотренной в лабораторной работе №3. В лабораторной работе №3 первичный ключ был составным и элементы первичного ключа были и внешними ключами. Здесь же мы первичный ключ вынесли в отдельный id. Это сделано для облегчения написания формы по редактированию этой таблицы, которая потребует отдельного первичного ключа (Oracle вообще любит отдельные первичные ключи). Такой момент можно, конечно, и обойти, но это было бы слишком сложно для единственной лабораторной работы по формам и отчетам.

В таблице Groups форма обучения названа Forma (вместо Form), чтобы не возникало конфликта названий с Application Builder.

Через Object Browser создадим все 4 таблицы со связями.

Создадим приложение для заполнения таблиц GROUPS, RASP, EXAMS и SUBJECTS.

Для этого нужно выбрать пункт меню Application Builder. Выберем Create Application.

На следующей странице назовем наше приложение Lab5. Остальные параметры оставим по умолчанию.

На странице Pages выберем тип страницы (Select Page Type) как бланк (Blank). Page Name зададим как Группы. Нажмем Add Page.

На следующей странице выберем один уровень вкладок (One Level of Tabs). На странице Shared Component выберем No

НЕ нашли? Не то? Что вы ищете?

На странице Attributes выберем в качестве Authentication Scheme - No Authentication (чтобы приложение не запрашивало пароля). Остальные параметры оставим по умолчанию.

На странице User Interface выберем любое приглянувшееся оформление.

На следующей странице нажмем Create.

Появится страница нашего приложения, имеющая вид:

Теперь в нашем приложении создадим четыре вкладки для редактирования, внесения и удаления данных в таблицах GROUPS, RASP, SUBJECTS и EXAMS.

1)  Создадим вкладку, содержащую отчёт и форму для редактирования, внесения и удаления данных в таблице GROUPS с помощью Мастера.

Жмем Create Page.

Из предложенных страниц выбираем Form. На следующей странице выбираем Form on a Table with Report. На следующей странице выбираем свою схему, т. е. ту в которой созданы таблицы. На следующей странице выбираем таблицу GROUPS.

На следующей странице в качестве Page выбираем страницу, которую мы уже создали (как бланк) 1 Группы. Page Name задаем как Группы.

Далее выделяем столбцы таблицы, которые будут отражены в отчете. Первичный ключ не отражаем.

На следующей странице выбираем вид иконки, при нажатии на которую мы попадем в окно редактирования. На следующей странице описывается как раз вышеупомянутое окно редактирования. Оставляем все по умолчанию. Далее выбираем Do not use tabs(чтобы окно редактирования группы не имело отдельной вкладки).

На следующей странице в качестве первичного ключа выберем GR_ID.

На странице источника первичного ключа (Primary Key Source) выберем Custom PL/SQL function.

Лирическое отступление №2.

В качестве источника первичного ключа можно указать существующий триггер (Existing Trigger), который задает правило формирования этого ключа. Также можно задать существующую последовательность (Existing sequence). Последовательность можно создать в Object Browser (там же, где мы создавали таблицы). Третий способ – это формирование первичного ключа из PL/SQL –функции (Custom PL/SQL function). Можно, например, искать наибольший существующий gr_id и увеличивать его значение на единицу. Этим мы и воспользуемся.

В поле Source мы впишем следующую функцию.

declare v_id number;

begin

select max(ex_id) into v_id from exams;

if v_id is null then return 1; else return v_id+1; end if;

end;

Страница будет иметь вид:

На следующей странице выберем все столбцы для включения их в форму. Далее оставим Yes для операций Update, Insert и Delete. На следующей странице жмём Finish.

Теперь мы можем запустить первую страницу нашей формы. После внесения некоторых данных она имеет приблизительно такой вид:

Нажатием иконки мы попадаем на страницу редактирования соответствующей записи:

2)  Создадим вкладку, содержащую табличную форму для редактирования, внесения и удаления данных в таблице EXAMS с помощью Мастера.

Жмем Create Page. Из предложенных страниц выбираем Form. На следующей странице выбираем Tabular Form. Далее в качестве разрешенных операций (Allowed Operations) выбираем Update, Insert and Delete. На следующей странице выбираем таблицу EXAMS. Далее выделяем столбцы таблицы, которые будут отражены в отчете. Первичный ключ не отражаем. На следующей странице в качестве первичного ключа выберем EX_ID. Выберем источник первичного ключа (Primary Key Source).

Далее в качестве Updateable Columns выберем остальные столбцы таблицы (dat, subj_id).

На следующей странице можно поменять метки кнопок (можно не менять J).

На следующей странице устанавливается, на какую страницу переходит приложение при нажатии кнопок Submit и Cancel. Везде ставим номер этой же таблицы.

Далее жмем Finish. Теперь мы можем посмотреть первую и вторую страницу нашей формы. Однако редактировать EXAMS пока не можем, поскольку справочник предметов SUBJECTS пока не заполнен.

3)  Аналогично пункту 2 создадим вкладку, содержащую табличную форму для редактирования, внесения и удаления данных в таблице SUBJECTS с помощью Мастера и введем некоторые предметы.

4)  Аналогично пункту 2 создадим вкладку, содержащую табличную форму для редактирования, внесения и удаления данных в таблице RASP с помощью Мастера.

Страницу для редактирования Subjects создадим аналогично таблице Exams.

Внесем некоторые тестовые данные с помощью полученной формы. Форма будет иметь вид:

5)  На вкладке Экзамены установим редактирование Subj_id только из списка имеющихся предметов.

Перейдем на страницу 2 приложения (вкладка – Экзамены) и нажмем Edit Page внизу экрана. Или же перейдем на страницу приложения и кликнем на иконку нужной страницы.

Здесь мы можем редактировать различные элементы четвертой страницы приложения.

В колонке Page Rendering, в зоне Regions нажмем на Report: Tabular Form.

На появившейся странице Edit Region выберем вкладку Report Attributes.

Жмём картинку редактирования для столбца subj_id. Попадаем на страницу свойств этого столбца.

Display As установим как Select List (query based LOV). Список значений (List Of Values) определим запросом, где первый столбец – значение, выводимое на экран, а второй – возвращаемое значение. Запрос такой: select subj_name, subj_id from subjects

Далее дважды нажимаем Apply Change. Далее запускаем четвертую страницу на выполнение (жмём маленький светофорчик в правом верхнем углу). Теперь наша страница выглядит так:

и данные заносить стало удобнее, чем через subj_id.

6)  Аналогично пятому пункту на вкладке Назначение экзаменов установим редактирование gr_id и ex_id.

У списка для gr_id можно использовать запрос:

Select num_gr||'-'||forma gruppa, gr_id from groups

У списка для ex_id можно использовать запрос:

Select bj_name||' '||to_char(e. dat,'DD. MM. YYYY'), e. ex_id from exams e, subjects s Where bj_id=bj_id

Страница 6 будет иметь вид:

7)  Добавим отчет по экзаменам на страницу Группы.

Для этого на странице свойств нажмем иконку создания области.

Далее жмём Report. Потом SQL Report. Вводим Title- Расписание экзаменов. Далее вводим свой запрос:

select e. dat, s.subj_name from exams e, subjects s, rasp r

where e. ex_id=r. ex_id and bj_id=bj_id

Жмем Create Report.

Страница Группы будет иметь вид

Но здесь выводятся все занесенные экзамены у всех групп.

Добавим возможность выводить расписание для каждой конкретной группы. Для этого на странице описания Page Defininition создадим новый элемент.

Выбираем скрытый элемент (Hidden). Задаем Item Name P1_gr_id. В качестве Region выбираем Расписание экзаменов. Жмем Next и Create Item.

Далее на странице описания Page Defininition в колонке Page Rendering, в зоне Regions нажмем на Report: Report on Groups. На появившейся странице Edit Region выберем вкладку Report Attributes. Выбираем редактирование столбца Num_gr. В свойствах столбца

задаем описание Column Link (ссылки столбца).

Дважды нажмите Apply Change.

Теперь при нажатии на поле столбца num_gr скрытому элементу P1_GR_ID присваивается значение первичного ключа GR_ID.

Теперь внесем изменения в запрос Расписание экзаменов. Для этого на странице описания Page Defininition в колонке Page Rendering, в зоне Regions нажмем на Report: Расписание экзаменов. Добавим условие в запрос. Запрос отчета будет иметь вид:

select e. dat, s.subj_name from exams e, subjects s, rasp r

where e. ex_id=r. ex_id and bj_id=bj_id and r. gr_id=:p1_gr_id

Здесь мы ставим условие, что gr_id будет равно нашему скрытому элементу. То есть через этот элемент мы связываем два отчета на первой странице.

Нажмите Apply Change

Теперь при выполнении на странице вкладки группы при нажатии на номер группы будет выводиться расписание экзаменов для этой группы.

Примерно так:

Задание на лабораторную работу:

1)  Выполнить все описанные в теории действия и создать приложение lab5.

2)  Пользуясь описанными методами создать приложение для редактирования одной-двух таблиц из своей курсовой работы и содержащее отчет по какому-либо требуемому запросу.

Требования к отчету.

Отчет по лабораторной работе должен содержать:

    цель работы; описание своих таблиц и запроса (по которым делается задание 2) вид экранных форм своего приложения (lab5 не надо)

При защите лабораторной работы необходимо продемонстрировать работу своего приложения (из задания 2, lab5 не надо)