Баксараев Андрей
Oracle
Forms 6i
Практические занятия
Урок 4. Создание
формы ведения сотрудников.
Создание объектов списков
значений LOV должностей и отделов.
Связь объектов LOV с блоком ведения сотрудников отделов.
Создадим формочку, в которой можно было бы
вводить информацию о сотрудниках, принадлежность их отделу, должности…
Откроем форму Lesson3; изменим имя модуля на LESSON4;
сохраним форму под именем Lesson4, используя меню File / Save As.
Создадим новый базовый блок SOTR связанный с таблицей Sotr и
расположенный на канве CANVAS3 .
Исключим из канвы поле SOTR_ID,
разместив его на Null - канве
В блоке Sotr
создадим триггер Pre-Insert, для связи поля
первичного ключа SOTR_ID с последовательностью SOTR_SEQ.
Тело триггера будет следующим:
select sotr_seq.nextval
into :sotr.sotr_id from dual;
Вызовем редактор для
канвы Canvas3 и разместим поля блока Sotr в необходимом порядке,
удалим статический текст Sotr_Id и рамку вокруг
блока. Изменим размер канвы Canvas3.

Создадим новое окно Window3 - копию окна Window0 , изменим свойство Title на
«Сотрудники отделов» . Установим размеры Window3 согласно размерам канвы Canvas3…
Свяжем канву Canvas3
с окном Window3 (Свойство канвы - Window).
Запустим форму на
выполнение.
Осуществим навигацию в блок Sotr (Ctrl-Page Down)
Выполним запрос , обратим внимание на значения полей OTD_OTD_ID и DOL_DOL_ID
Попробуйте ввести новую запись и укажите значения полей OTD_OTD_ID и DOL_DOL_ID как 100 и 200 .
Попытайтесь сохранить запись и обратите внимание на
сообщение об ошибке. Текст ошибки можно посмотреть нажав комбинацию клавиш Shift-F1

При попытке вставить новую запись в таблицу Sotr отработало ограничение
на таблицу SOTR -
значения внешних ключей Dol_Dol_Id и Otd_Otd_Id должны ссылаться на
существующий первичный ключ соответственно таблиц Dol и Otd. Значений 100 и 200 в них конечно же нет.
Чтобы выйти из этой ситуации необходимо знать какому отделу
соответствует какой ключ и при вводе нового сотрудника или при переводе его с
отдела в отдел заполнять поле Внешнего ключа этим значением…
Другой выход подразумевает создание списка значений Lov и связь его с полями внешних ключей блока, при этом в блок будет
добавлено небазовое поле в котором будет отображаться не код отдела, а его
наименование …
Добавим в блок это небазовое поле:
в навигаторе раскроем узел блока SOTR и
поместим курсор на узел Items
используя меню Navigator / Create, создайте новый элемент блока
в окне свойств этого элемента укажите
имя элемента Name как DSP_NAME
базовое свойство Base Table Item как False
принадлежность элемента канве Canvas как
CANVAS3
в навигаторе определим
принадлежность элемента OTD_OTD_ID - Null канве
В редакторе канвы Canvas3 разместите поле Dsp_Name на месте, где было поле Otd_Otd_Id. Если есть необходимость в выравнивании объектов, то
используйте меню Arrange /
Align Objects . В палитре
инструментов редактора канвы выберите инструмент статический текст и
создайте заголовок для поля Dsp_Name, как Отдел.
Создадим в навигаторе новый объект Lov и в качестве запроса укажем
новый запрос в новой группе записей:

Этот запрос будет возвращать
наименование отдела и его первичный ключ.
Переименуем объект Lov в LOV1 и группу записей в RG1
Свяжите поле Otd_Id объекта Lov1 с
полем SOTR.OTD_OTD_ID
Свяжите поле Name объекта Lov1 с полем SOTR.DSP_NAME и определите для этого поля
заголовок Отдел

В свойствах поля Sotr.Dsp_Name укажите связь его со списком значений
LOV как LOV1
LOV For Validation как True
Теперь необходимо создать триггер Post-Change на поле блока Sotr.Otd_Otd_Id, он необходим для
оперативного отображения в поле DSP_NAME наименования отдела
соответствующего ключу otd_otd_id .
Тело триггера Post-Change :
declare
cursor c1 is
select name from otd where
otd_id=:sotr.otd_otd_id;
begin
open c1;
fetch c1 into :sotr.dsp_name;
if c1%notfound then
:sotr.dsp_name:=null;
end if;
close c1;
end;
В навигаторе объектов измените
свойства объекта LOV1:
Title как
Список Отделов
X Position на 100
Y Position на
50
Запустим
форму на выполнение …
Перейдем в блок Sotr и выполним запрос .
Обратите внимание на значение поля Отдел
Поместите
курсор в поле Отдел и вызовите
список значений по клавише F9
Выберите
из списка новое значение и сохраните запись.
Попытайтесь исправить название отдела
в поле Отдел на несуществующее
значение. Что произошло?
Закройте
форму …
Создадим
новый список значений должностей и их окладов и свяжем его с внешним ключом
Sotr.Dol_Dol_Id
Для отображения наименования должности
и ее оклада необходимо добавить в блок Sotr два небазовых блока DSP_NAME_D и DSP_OKLAD , а также убрать с канвы
поле внешнего ключа DOL_DOL_ID :
в навигаторе раскроем узел блока SOTR и
поместим курсор на узел Items
используя меню Navigator / Create создайте два новый элемент блока
в окне свойств этих элементов укажите
имя элемента Name как DSP_NAME_D и DSP_OKLAD соответственно
базовое свойство этих полей Base Table Item как False
принадлежность элементов канве Canvas как
CANVAS3
в навигаторе определим
принадлежность элемента DOL_DOL_ID - Null канве
В редакторе канвы Canvas3
разместите поля Dsp_Name_D и Dsp_Oklad на месте, где было поле Dol_Dol_Id . Если есть необходимость в выравнивании объектов, то
используйте меню Arrange / Align Objects.
В палитре инструментов редактора канвы выберите инструмент статический
текст и создайте заголовки для поля Dsp_Name_D и Dsp_Oklad, как Должность и Оклад соответственно.
Создадим в навигаторе новый объект Lov и в качестве запроса укажем
новый запрос в новой группе записей:
Select
Name_D,Oklad,Dol_Id from Dol
Этот запрос будет возвращать
наименование должности и оклад.
Переименуем объект Lov в LOV2 и группу записей в RG2
Свяжите поле Dol_Id объекта Lov2 с
полем SOTR.DOL_DOL_ID
Укажите ширину поля Dol_Id объекта Lov2
значением 0 , для того чтобы оно не появлялось
в списке значений LOV
Свяжите поле Name_D объекта Lov2
с полем SOTR.DSP_NAME_D и определите для этого поля
заголовок Должность
Свяжите поле Oklad объекта Lov2 с полем SOTR.DSP_Oklad и определите для этого поля
заголовок Оклад
В свойствах поля Sotr.Dsp_Name_D укажите связь его со списком
значений
LOV как LOV2
LOV For Validation как True
Теперь необходимо создать триггер Post-Change на поле блока Sotr.Dol_Dol_Id, он необходим для
оперативного отображения в
полей
DSP_NAME_D и DSP_OKLAD наименований
должности и оклада соответствующего ключу dol_dol_id .
Тело триггера Post-Change :
declare
cursor c1 is
select name_d,oklad from dol where
dol_id=:sotr.dol_dol_id;
begin
open c1;
fetch c1 into
:sotr.dsp_name_d,:sotr.dsp_oklad;
if c1%notfound then
:sotr.dsp_name_d:=null;
:sotr.dsp_oklad :=null;
end if;
close c1;
end;
В навигаторе объектов измените
свойства объекта LOV2 :
Title как
Список Должностей
X Position на 200
Y Position на
50
Запустим
форму на выполнение …
Перейдем в блок Sotr и выполним запрос .
Обратите внимание на значение полей Отдел , Должность , Оклад
Поместите
курсор в поле Должность и
вызовите список значений по клавише F9.
Выберите
из списка новое значение и сохраните запись.
Попытайтесь исправить название
должности в поле Должность на
несуществующее значение. Что произошло?
Введите несколько новых записей,
сохраните изменения.
Закройте форму.
Сохраните форму, используя меню File / Save…