Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СУБД Oracle для разработчиков. Forms and Reports 6i-10g


Здравствуйте, уважаемые подписчики! 

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

Блоки и элементы

 

 

            Блоки (Block) - это логическая структура, которая не имеет физического определения, не является физической копией каких либо данных, она  создает логический структурированый  “образ” на основе выбранной  вами модели данных (таблица, представление, синоним). Другими словами блок – это упорядоченная, организованая еденица представления данных на основе, указанного пользователем источника данных. Причем при создании блока вам ненужно еще раз указывать на взаимосвязи между строками и столбцами в таблице и между таблицами, создавать ключи, т.к. Forms сам определит эти связи, а от вас лишь требуется согласиться на связывание или нет. Блоки как и объекты БД могут содержать взаимосвязанные элементы, которые выводят записи данных. Поскольку блоки являются лишь логическими единицами, то ограничений на их количество нет. Несмотря на то что блоки не являются физической моделью, блоки как и другие объекты могут  создаваться, копироваться, изменяться и имеют свои свойства.

 

 

Типы блоков

 

Различаю два типа блоков:

 

 Блок  с базовой таблицей -  это блок созданный на основе определенной таблицы или представлении  базы данных. В таком блоке  элементы (один или более)  прямо связаны с колонками в базовой таблице, т.к. элементы втаком блоке содержат значения столбцов, выбранной вами таблицы или представлении.

 

 Управляющий блок - это блок не связанный с таблицей базы данных и элементы в управляющем блоке не связаны с колонками базы данных.

 

 

Блоки с базовой таблицей автоматически включают в себя функции поддержки запросов, DML операции (обновление, вставка, удаление) с таблицей, с которой этот блок связан, а также встроенные  подпрограммы для выполнения этих операций. Как разновидность блока с базовой таблицей можно выделить блок с базовой таблицей с ограничением целостности, причем ничего сложного в создании такого блока нет, т.к. для этого требуется лишь наличие одной или более взаимосвязанных таблиц, а также, включенную опцию  Integrity Constrains, которая будет говорить Forms о том, что необходимо автоматически создать ограничения целостности, определенные в словаре данных для вашей базовой таблицы.

 

Если вы создаете блок с базовой таблицей с ограничением целостности,  с включенной опцией Integrity Constrains, то  это говорит Oracle Forms, что при  создании блока нужно автоматически изменяет некоторые его свойства, а также сгенерировать триггеры и программные модули (Program units):

 

·         Если элемент, связан с колонкой первичного ключа в базовой таблице, то атоматически для элемента устанавливается свойство Primary Key (первичный ключ) на True и свойство Update Allowed (разрешено обновление) на False, а для блока свойство Primary Key устанавливает на On.

 

·         Для придания силы уникальным значениям в элементах, связанных с колонками первичных ключей, и для включения ограничений CHECK создает триггер When_Validate_Item или When_Validate_Record.  При наличии составного первичного ключа создается триггер When_Validate_Record, иначе When_Validate_Item.

 

·         Создает для блока триггер When_Remove_Record, если его базовая таблица в базе данных создана как имеющая отношение первичный-внешний ключ с другой таблицей. Этот триггер предохраняет запись от удаления, если имеются соответствующие подчиненные записи в таблице внешнего ключа.

 

    Позже, при рассмотрении модели  “Главный-подчиненый” (master-detail) мы с вами рассмотрим какие программные модули и свойства Oracle Forms автоматически генерирует  при создании блоков с зависимостью  “Главный-подчиненый”.

 

Свойства блока

 

Очень важно сделать правильную настройку блока, т.к. это может очень сильно сказаться на производительности вашего приложения.

Сейчас я перечислю и кратко опишу все свойства Блока данных, а наиболее важные мы рассмотрим более подробно (Рис. 1):

Рисунок 1 – Таблица свойств Блока Данных

1. Вкладка General (Общие):

 

·       Name – в этом поле вы указываете имя вашего объект. Если вы, к примеру, назвали блок – Firms, то программно к этому объекту вы уже будете обращаться, как  :Firm.item_name

 

·       Subclass Information – при выборе этого значения, запускается окно Subclass (Рис. 2):

 

 

 

Рисунок 2 – Subclass Information (Информация о подклассе)

 

            В этом окне в поле Object Name вы указываете подкласс выбранного вами объекта, в поле Moduleнаименования модуля из которого вы хотите выделить подобъект для своего объекта. Переключатель Object означает, что подклассом будет объект, а Property Class, соответственно – свойство класса (доступно в узле Property Class), причем при установке этого переключателя название поля Object Name меняется на Property Class Name.

 

·       Comments – в этом поле вы можете указать комментарии к созданному вами блоку, то есть как можно более конкретизировать этот объект.

 

2. Вкладка Navigation (Навигация)

 

 

·       Navigation Style определяет стиль Навигации, это поле может принимать 3 типа значений.

·       Previous Navigation Data Block – в этом поле вы можете указать какой блок будет обозначен как  предыдущий блок при перемещении. К примеру, если у вас в Блоке1 этот параметр имеет значение Блок3, тогда в такой ситуации если вы перешли с Блока2 на Блок3 и захотите вернутся на предыдущий блок, то вы вернетесь на Блок3, а Блок2.

·       Next Navigation Data Block это значение имеет такое же определение как и предыдущее, с той лишь разницей, что навигация осуществляется на следущий блок, а не предыдущий.

 

3. Вкладка Records (Записи)

 

 

·       Current Record Visual Attribute Group (группа атрибутов визуализации текущей записи) – это значение по умолчанию может принимать два типа значения: <Null> и Default. Если же вы создали свою группу атрибутов, то соответсвенно и она будет добавлена в список возможных значений. При создании Блока это значение - <Null>

·       Query Array Size определяет максимальное количество записей, одновременно выбираемое Forms'ом. Маленькое значение параметра увеличивает время отклика формы, а большое значение уменьшает полное время обработки, делая меньшее количество запросов к БД.

·       Number of Records Buffered – определяет минимальное количество строк, буферизуемых в памяти во время выполнения запроса в блоке. Все остальные записи буферизуются во временном файле на диске клиента. Большое значение увеличивает производительность работы формы со значительными объемами данных.

·       Number of Records Displayed в этом поле указывается количество отображаемых одновременно записей в Блоке. Если значение равно “0” или “1” то в блоке отображается только одна запись, если, к примеру этому полю присвоить значение “2”, то в Блоке будет выведено одновременно две записи, причем их элементы – item_text                                                  продублируются и создатутся автоматически самим Forms'ом                                    

·       Query all Records – определяет, должны ли выбираться все записи, удовлетворяющие критерию запроса, или будет выбрано количество записей, равное параметру Query Array Size блока. В подавляющем большинстве случаев при работе с большими объемами данных в форме не следует устанавливать его в Yes. Значение Yes обычно используется в формах, использующих вычисление итогов.

 

·       Record Orientation – определяет оринтацию записи. Принимает два значения “По вертикали” и “По горизонтали”, причем значение “По вертикали”, является значением по умолчанию.

·       Single Record (единичная запись) – принимает значения “Yes” и “No”, по умолчнию Forms ставит это значение в “No”, что дает возможность отображать более одной записи

 

 

4. Вкладка Database (База Данных)

 

 

·       Database Data Block - принимает значения “Yes” и “No”. При создании Блока данных как с помощью мастера так и вручную, Forms по умолчанию ставит этот параметр в “Yes”, то есть по умолчанию, создаваемый Блок становится Блоком данных вашей БД. Если параметр имеет значение “No”, то блок не является объектом БД

·       Enforce Primary Key – обеспечить первичный ключ, если параметр принимает значение “Yes”, то ,соответственно, Блок обеспечивается первичным ключом средствами Forms

·       Query Allowed (запрос разрешен) – если значение этого параметра “Yes”, тогда запросы в этом блоке разрешены, и наоборот, если “No

·       Query Database Type (запросить тип исходных данных) – в этом свойстве, значением параметра является указание типа данных на основе которых вы создаёте ваш Блок данных. Типы данных: “Ничего”, “Таблица”, “Процедура”, “Триггеры транзакций”, “Фраза From”

·       Query Database Name (запросить имя источника данных) – при входе в это поле, Forms запускает редактор в котором вы определяете имя источника данных, в зависимости от выбранного вами параметра в  свойстве Query Database Type. Это означает если в типе исходных данных вы указали имя таблицы, то и при указании запрашеваемого имени источника данных вы должны указать имя таблицы, если процедуры, триггеров транзакций, то также необходимо указать имена типа этих данных, если же типом данных является фраза FROM, то именем источника будет являться завершение фразы From с указанием имени таблицы, причем в конце фразы символ ; опускается

·       Query Database Columns – при выборе этого свойства запускается одноименное окно – “Запросить Столбцы Исходных Данных”, в котором вы выбераете, запрашиваемые столбцы (Column Names), их тип (Type), а также параметры масштабирования (Scale, Lenght)

·       Query Database Arguments – этот параметр работает по такому же принципу как и предыдущей, стой лишь разницей, что в запускаемом окне “Запросить Аргументы Исходных Данных” параметеры Argument Names (имя аргументов),  тип аргумента (Type), режим (Mode - IN и OUT) и значение аргумента (Value)  предназначены для процедуры, а не таблицы

·       Alias (псевдоним) – синоним, связанный с источником данных

·       Include Ref Item – если параметру этого свойства присвоить значение “Yes”, то создастся дополнительный элемент Ref, содержащий дополнительный ID (идентификатор) объекта

·       Where Clause (фраза where) – запускает редактор Forms'a в котором вы набираете условие фразы where, причем само слово вы уже не набираете, а также не забудте, что в конце вашего SQL предложения символ “;” опускается 

·       Order by Clause (фраза order by) этот параметр определяется так же как и предыдущей, только в данном случае вы достраиваете фразуorder by

 

·       Optimizer Hint (подсказка оптимизатору) – здесь вы указываете строку подсказки передаваемую оптимизатору для выбора наилучшего пути построения запроса. Это свойство важно учесть, т.к. Oracle Forms 6i поддерживает Материализованные представления (materialized view)

·       Insert Allowed (вставка разрешена) – если значению этого свойства присвоить “No”, тогда Forms запретит вставку в набор данных, определяемых этим блоком и разрешит, если присвоить “Yes”. По умолчанию значение этого свойства и родственных ему Delete и Update по умолчани ставится Forms'ом в “Yes”, то есть разрешено

·       Update Allowed (обновление разрешено) – если значению этого свойства присвоить “No”, тогда Forms запретит обновление в наборе данных, определяемых этим блоком и разрешит, если присвоить “Yes

·        Locking Mode – этим свойством задается режим блокирования записей, по умолчанию, этому свойству, Forms присваивает значение “Автоматическое”, то есть Forms сам выбирает режим блокировки из двух других - “Немедленный”, в ктором блокировка происходит сразу же при запросе строк, соответствующем запрашиваемым записям или  “С задержкой”, в этом случае, соответсвенно блокировка происходит после завершения вашей операции, то есть с задержкой

·       Delete Allowed (удаление разрешено) – если значению этого свойства присвоить “No”, тогда Forms запретит удаление в наборе данных, определяемых этим блоком и разрешит, если присвоить “Yes 

 

·       Update Changed Columns Only (обновить только изменяемые столбцы) – здесь вроде бы само название говорит само за себя, то есть при обновлении обновить все строки (если значение этого свойства “Yes”) или обновить только измененные строки (если значение этого свойства “No”), но использование и этого параметра очень влияет на производительность вашего приложения. Описание и рекомендации по этой части вы найдете в Главе “Как происходит обновление в Oracle Forms 6i

·       Enforce Column Security (обеспечить защиту столбца) – этот параметр отвечает за обеспечение привелегий на обновление и вставку для столбца. По умолчанию это свойство имеет значение “No”

 

·       Maximum Query Time (максимальное время запроса) – здесь вы указываете максимальное время на ожидание выполнения запроса до прерывания, по умолчанию оно равно “0”, то есть время выполнения запроса до прерывания неограничено

·       Maximum Record Fetched (максимум выбранных записей) этот параметр отвечает за максимально количество выбранных строк после которого можно прервать запрос, по умолчанию это значение равно “0”

 

5. Вкладка Advanced Database (Продвинутая База Данных)

 

· DML Data Target Type (тип адресата DML данных) – определяет тип источника данных для выполнения операций DML, имеет четыре возможных параметра: Null (Ничего), Таблица, Процедура и Триггеры транзакций. Автоматически это свойство принимает такое же значение как и тип источника данных

· DML Data Target Name  (имя адресата DML данных)   это свойство принимает значения имя источника данных

· Insert Procedure Name (вставить имя процедуры) – вставляет в поле значения свойства имя процедуры, заданное вами

· Insert Procedure Result Set Columns (вставить столбцы набора результатов процедуры) – при выборе этого свойства запускается окно редактора процедуры с одноименным названием и имеющим такой же вид и назначение как и окно свойства Query Database Arguments вкладки Database

· Insert Procedure Arguments (вставить аргументы процедуры) – вставить новые аргументы, определенной вами процедуры аналогично свойству Query Database Arguments вкладки Database

· Update Procedure Name (обновить имя процедуры) – это поле предназначено для ввода нового имени процедуры

· Update Procedure Result Set Columns (обновить столбцы набора результатов процедуры) – запускаетокно обновления аргументов процедуры, содержащее такие же опции как и в случае с Insert Procedure Result Set Columns

· Update Procedure Arguments (обновить аргументы процедуры) – запускает окно обновления аргументов процедуры аналогичное Insert Procedure Arguments

· Delete Procedure Name (удалить имя процедуры) – удаляет имя выбранной процедуры

· Delete Procedure Result Set Columns (удалить столбцы набора результатов процедуры)  – запускает окно типа Insert Procedure Result Set Columns, в котором вы можете удалить перечисленные вами столбцы, в поле Column Names

· Delete Procedure Arguments (удалить аргументы процедуры) – запускает окно типа Insert Procedure Arguments, только предназначеный для удаления аргументов процедур

· Lock Procedure Name (блокировать имя процедуры) – в этом свойстве требуется указать имя процедуры, которую вы хотите заблокировать.

· Lock Procedure Result Set Columns (блокировать столбцы набора результатов процедуры) – при выборе этого параметра запускается окно типа Insert Procedure Result Set Columns, только в этом случае в поле Column Names вы указываете имена столбцов, которые вы хотите заблокировать.

· Lock Procedure Arguments – при выборе этого свойства запускается окно “Блокировать аргументы процедуры”, в котором,  в поле Argument Names вы указываете имена аргументов вашей процедуры, которые вы хотите заблокировать.

· DML Array Size максимальный размер массива для вставки, обновления и удаления записей за один раз.

· Precompute Summaries (предварительный подсчет итогов) – этот параметр говорит Forms о том что, надоли вычислять значения всех  суммируемых элементов в блоке до запуска обычного запроса по блоку.

· DML Returning Value (возвращаемое значение командой DML) – определяет должен ли этот блок использовать команды DML с возвращаемыми значениями

 

6. Вкладка Scrollbars (Полоса прокрутки)

 

 

·  Show Scroll Bar – принимает два значения “Yes” или  No”. Для отображения Scroll Bar выберайте значения “Yes

·  Scroll Bar Canvas – вы этом поле вам нужно указать вид-картинку (Canvas) на которой вы хотите разместить Scroll Bar

·  Scroll Bar Tab Page (страница вкладки с полосой прокрутки) – в этом свойстве вы можете указать страницу вкладки на которой будет находится ваша полоса прокрутки, если вкладок нет, то значение этого поля “Null

·  Scroll Bar Orientation (ориентация полосы прокрутки) – в этом свойстве задается значение направления положения полосы прокрутки - “По вертикали” и “По горизонтали”

·  Scroll Bar X Position позиция Scroll Bar по оси Ох

 

·  Scroll Bar Y Position – позиция Scroll Bar по оси Оу

 

·  Scroll Bar Width – устанавливает ширину Scroll Bar

 

·  Scroll Bar Length – устанавливает высоту Scroll Bar  

 

·  Reverse Direction – определяет допускает ли линейка прокрутки просмотр в обратном направлении.

 

 

7. Вкладка Visual Attributes (Визуальные атрибуты)

 

·  Visual Attribute Group (группа атрибутов визуализации) – это группа свойств которые вы можете назначить своему объекту, в данном случае блоку. По умолчанию это значение Default

 

·  Character Mode Logical Attribute (логический атрибут символьного режима) – здесь вы задаете базисные атрибуты устройства  символьного режима  

 

·  White on Black   в этом свойстве вы указываете как объекты будут отображаться на монохромном растровом дисплее. По умолчанию это значение - <Не указано>, остальные два параметра - “Да” и “Нет”, где “Да” - означает что  объект, что обьект отображается белым цветом на черном фоне  

 

8. Вкладка Color (Цвет)

 

 

·  Foreground Color (цвет отображаемых на экране символов) – задает цвет для переднего плана объекта, внашем случае это элементы текста. При выборе этого свойства запускается окно “Набор шаблонов закраски”. Для этого запустите окно с палитрой закраски, затем выберете нужный вам цвет и щелкните по нему, после чего окно автоматически закроется и в поле этого свойства отобразится код выбранного вами цвета

·  Background Color (цвет фона) – здесь вы указываете цвет фона (фоновой области). Закраска фона выполнятся точно так же как и в Foreground Color

 

·  Fill Pattern (шаблон заполнения) – здесь вы выбераете рисунок (орнамент) для заполнения объекта, причем цвет рисунка будет соответствовать цвету отображаемых символов, а цвет фона – фоновой части

 

 

9. Вкладка Character Mode (Символьный Режим)

 

·  Listed in Data Block Menu (перечислено в меню блока данных) – должен ли быть блок указан в меню блоков данных символьного режима

 

· Data Block Description в этом поле вы можете дать описание Блоку Данных, которое будет использовано как в меню блоков данных

 

10. Вкладка International (Международный)

 

 

·  Direction (Направление) – направление разметки для двунаправленных объектов размеров, используется в NLS (National Language Standart) приложениях. Задается одним из трех возможных параметров - “По умолчанию”, “Слева направо”, “Справа налево”. Первое значение и есть значением по умолчанию, которое задает Forms этому свойству при создании Блока данных

Я думаю, что теперь, после более подробного описания всех свойств Блока данных  вам стало понятно насколько важно знание назначения и правильной настройки свойств этого объекта для вашего приложения.

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

·       Set_Block_Property – эта функция задает значение, выбранному вами, свойству

 

·       Get_Block_Property – эта функция возвращает значение, выбранного вами, свойства

 

Пример:

 

У вас есть форма с данными, которые могут изменять только те пользователи которые знают пароль, а остальные пользователи могут только читать данные. Для этого выполним следуещее упражнение:

·      Создайте форму. Выделите Блок в Навигаторе объектов и запустите Layout Editor этого блока. Создайте в нем два новых элемента item_text1 и Button1.

·     Теперь создайте триггер уровня формы – WHEN-NEW-FORM-INSTANCE, затем выделите этот триггер в Навигаторе и запустите редактор PL/SQL и набирите следующий код:

go_block('block_name');

 

set_block_property('block_name',update_allowed, property_false);

 

set_block_property('block_name',insert_allowed, property_false);                   

 

set_block_property('block_name',delete_allowed, property_false);

 

Триггер WHEN-NEW-FORM-INSTANCE срабатывает при запуске формы, поэтому как только форма запустится наш триггер сработает и поменяет значение  свойств insert_allowed, update_allowed, delete_allowed блока на False, а значит вставка, обновление и удаление в этом блоке будут запрещены.

·     Теперь выделите кнопку Button1, которую вы только что создали, затем правым щелчком мыши вызовите всплывающие меню и выберите Smart Trigger->WHEN_BUTTON_PRESSED. Запустите редактор PL/SQL этого триггера и набирите в нем следующие строки:

if :block_name.item_text1='Yes'

 

then

 

set_block_property('block_name',update_allowed, property_true);

 

set_block_property('block_name',insert_allowed, property_true);

 

set_block_property('block_name',delete_allowed, property_true);

 

message('Регистрация принята');

else

message('Неверно введен пароль');

end if;

·      Скомпилируйте триггер и запустите форму Program-> Run-> Client Server. Теперь выполните запрос “Выбрать все записи” и попытайтесь их изменить, удалить или вставить новую, но поскольку мы запрограммировали форму так, что при ее запуске будут запрещены операции DML, то для возобновления работы операторов DML введите в элемент text_item1 слово “Yes”, затем нажмите кнопку Button1 и после того как увидите сообщение “Регистрация принята” можете смело выполнять операторы DML.

Пример:

С помощью фунции Get_Block_Property вы можете узнать текущее значение того свойства, которое вы указали в процедуре:

Declare

 

Blc_property varchar2 (5);

 

begin

 

a:=Get_Block_Property('block_name',delete_allowed)

 

end;

 

Эти примеры наглядно показывают, как можно полезно использовать свойства вашего объекта.

 

 

 

 

 

По всем вопросам и предложением пишите на sqaimes@mail.ru


В избранное