Блоки. Виды и структура блоков. Управление свойствами блока
Создание небазовых блоков
Небазовый, или, как его еще называют, управляющий (Control Block), блок создается намного проще, так как не требует источника данных и может быть создан без привязки к базе данных. Для создания небазового блока данных достаточно выполнить несколько действий:
- Находясь в навигаторе объектов, выберите узел Data Blocks и нажмите кнопку "Create" для появления окна "New Data Block " ( рис. 7.9).
- В этом окне есть два переключателя, один из которых предлагает нам создать блок данных с помощью мастера блоков данных ( "Use the Data Block Wizard" ), а другой — создать блок данных вручную ( "Block a new data block manually" ). Выберите опцию "Block a new data block manually" и нажмите "OK".
- После того как вы подтвердите свой выбор, в навигаторе объектов создастся блок данных с именем по умолчанию BLOCKXX, где XX – это порядковый номер, который Forms присваивает каждому объекту при создании.
Свойства блока
Теперь, когда мы научились создавать блок данных, можно перейти к рассмотрению его атрибутов (свойств). Атрибуты блока – это его неотъемлемая часть, поэтому очень важно знать их назначение. Неправильная настройка атрибутов может привести к различным критическим ситуациям, таким как падение производительности, неправильная работа или возникновение исключительных ситуаций. Если вы будете знать большинство атрибутов блока, вы сможете не только повысить производительность вашего приложения, но и избавить себя от написания лишнего кода.
Сейчас мы ознакомимся со всеми свойствами блока данных, а самые важные рассмотрим более подробно ( рис. 7.10).
- Вкладка General (Общие)
- Name – это свойство определяет внутренне имя вашего блока, которое вы будете использовать для обращения к нему в своих программах.
-
Subclass Information – при выборе этого свойства запускается окно Subclass (
рис.
7.11).
В этом окне вы можете выбрать класс свойств или подобъект для блока. Под подобъектом здесь подразумевается блок данных. Чтобы назначить блоку подобъект, нужно:
- установить переключатель в Object – этим вы указываете, что в качестве подкласса будет выбран объект;
- перейти в поле Module и выбрать имя модуля, в котором находится подобъект. Чтобы в поле Module появился список доступных модулей, нужно, чтобы они были открыты;
- после того как модуль выбран, в поле Object Name становятся доступными его объекты. Выберите нужный объект и нажмите кнопку "OK".
Чтобы назначить блоку класс свойств, нужно проделать те же действия, что и выше, предварительно установив переключатель на Property Class.
Примечание: блок, в котором было задействовано свойство "Subclass Information", отличается от других тем, что на иконке блока и всех его элементах появляются красные стрелки.
- Comments – в этом свойстве вы можете указать комментарии к созданному вами блоку, что позволяет конкретизировать этот объект.
- Вкладка Navigation (Перемещение)
-
Navigation Style – это свойство определяет стиль перемещения:
- Та же запись – этот параметр означает, что при перемещении на следующее или предыдущее поле запись не изменяется и при повторном возврате в это поле статус поля и блока не изменяется. Это значение Forms ставит по умолчанию при создании блока.
- Изменить запись – этот параметр означает, что при перемещении на другое поле его статус переходит в режим обновления или Update.
- Изменить блок данных – этот параметр определяется точно так же, как и предыдущий, только с той разницей, что статус Update принимает блок.
- Previous Navigation Data Block – в этом поле вы можете указать, какой блок будет обозначен как предыдущий блок при перемещении. К примеру: у вас в Блоке1 этот параметр имеет значение Блок3; тогда в ситуации, если вы перешли с Блока2 на Блок3 и захотите вернуться на предыдущий блок, то вы вернетесь не Блок3, а на Блок2.
- Next Navigation Data Block – это значение имеет такое же определение, как и предыдущее, с той лишь разницей, что навигация осуществляется на следующий блок, а не предыдущий.
-
Navigation Style – это свойство определяет стиль перемещения:
- Вкладка 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", что дает возможность отображать более одной записи.
- Вкладка 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, Length).
- 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 ставится на "Yes", то есть разрешено.
- Update Allowed (обновление разрешено) – если значению этого свойства присвоить "No", то Forms запретит обновление в наборе данных, определяемых этим блоком, – и разрешит, если присвоить "Yes".
- Locking Mode – этим свойством задается режим блокирования записей. По умолчанию этому свойству Forms присваивает значение "Автоматическое", то есть Forms сам выбирает режим блокировки из двух: "Немедленный", в котором блокировка происходит сразу же при запросе строк, соответствующих запрашиваемым записям, или "С задержкой" – в этом случае соответственно блокировка происходит после завершения вашей операции, то есть с задержкой.
- Delete Allowed (удаление разрешено) – если значению этого свойства присвоить "No", то Forms запретит удаление в наборе данных, определяемых этим блоком, – и разрешит, если присвоить "Yes".
-
Key Mode – это свойство определяет способ уникальной идентификации строк в базе данных. Свойство может принимать четыре значения:
- автоматический;
- уникальный;
- обновляемый;
- необновляемый.
- Update Changed Columns Only (обновить только изменяемые столбцы) – здесь вроде бы название говорит само за себя, то есть задается при обновлении задается команда обновить все строки (если значение этого свойства "Yes") или обновить только измененные строки (если значение этого свойства "No"); но использование этого параметра очень влияет на производительность вашего приложения. Описание и рекомендации вы найдете в разделе "Как происходит обновление в Oracle Forms 6i".
- Enforce Column Security (обеспечить защиту столбца) – этот параметр отвечает за обеспечение привилегий на обновление и вставку для столбца. По умолчанию это свойство имеет значение "No".
- Maximum Query Time (максимальное время запроса) – здесь вы указываете максимальное время на ожидание выполнения запроса до прерывания. По умолчанию оно равно "0", то есть время выполнения запроса до прерывания неограниченно.
- Maximum Record Fetched (максимум выбранных записей) – этот параметр отвечает за максимальное количество выбранных строк, после которого можно прервать запрос. По умолчанию это значение равно "0".
- Вкладка Advanced Database (Продвинутая база данных)
- D ML 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 с возвращаемыми значениями.
- Вкладка 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 – определяет, допускает ли линейка прокрутки просмотр в обратном направлении.
- Вкладка Visual Attributes (Визуальные атрибуты)
- Visual Attribute Group (группа атрибутов визуализации) – это группа свойств, которые вы можете назначить своему объекту, в данном случае блоку. по умолчанию это значение Default.
- Character Mode Logical Attribute (логический атрибут символьного режима) – здесь вы задаете базисные атрибуты устройства символьного режима.
- White on Black – в этом свойстве вы указываете, как объекты будут отображаться на монохромном растровом дисплее. По умолчанию это значение <Не указано>, остальные два параметра – "Да" и "Нет", где "Да" означает, что объект отображается белым цветом на черном фоне.
- Вкладка Color (Цвет)
- Foreground Color (цвет отображаемых на экране символов) – задает цвет для переднего плана объекта, в нашем случае это элементы текста. При выборе этого свойства запускается окно "Набор шаблонов закраски". Для этого запустите окно с палитрой закраски, затем выберите нужный вам цвет и щелкните по нему, после чего окно автоматически закроется и в поле этого свойства отобразится код выбранного вами цвета.
- Background Color (цвет фона) – здесь вы указываете цвет фона (фоновой области). Закраска фона выполнятся точно так же, как и в Foreground Color.
- Fill Pattern (шаблон заполнения) – здесь вы выбираете рисунок (орнамент) для заполнения объекта, причем цвет рисунка будет соответствовать цвету отображаемых символов, а цвет фона – фоновой части.
- Вкладка Character Mode (Символьный режим)
- Listed in Data Block Menu (перечислено в меню блока данных) – определяет, должен ли блок быть указан в меню блоков данных символьного режима.
- Data Block Description – в этом поле вы можете дать описание блоку данных, которое будет использовано как в меню блоков данных.
- Вкладка International (Международный)
- D irection (направление) – направление разметки для двунаправленных объектов размеров, используется в "NLS-приложениях (National Language Standart)" . Задается одним из трех возможных параметров: "По умолчанию", "Слева направо", "Справа налево". Первое значение является значением по умолчанию, которое задает Forms этому свойству при создании блока данных.
Настройка некоторых свойств блока
В этом разделе мы рассмотрим свойства блока, настройки которых влияют на производительность приложения. Когда ваша система достигнет огромных размеров и в ваших таблицах будет не одна тысяча записей, вы начнете ощущать падение производительности формы, а именно:
- увеличение времени выполнения запросов;
- задержку вычисления итогов;
- увеличение размеров временных файлов, хранящих буферизованные данные.
На уровне блока вы можете управлять следующими свойствами, которые влияют на производительность работы формы:
- Query All Records. Определяет, должны ли выбираться все записи, удовлетворяющие критерию запроса, или будет выбрано количество записей, равное параметру Query Array Size блока. В подавляющем большинстве случаев при работе с большими объемами данных в форме не следует устанавливать это значение на "Yes". "Yes" обычно применяется в формах, где происходит вычисление итогов.
- Query Array Size. Определяет максимальное количество одновременно выбираемых записей. Маленькое значение параметра увеличивает время отклика формы, а большое значение уменьшает полное время обработки, делая меньшим количество запросов к БД.
- Number of Records Buffered. Определяет минимальное количество строк, буферизуемых в памяти во время выполнения запроса в блоке. Все остальные записи буферизуются во временном файле на диске клиента. Большое значение увеличивает производительность работы формы со значительными объемами данных.
- DML Array Size. Определяет максимальный размер массива для вставки, обновления и удаления строк в БД в один момент времени. Большой размер уменьшает время обработки транзакций, снижая сетевой трафик с БД, но требует большего количества памяти. Оптимальный размер – количество строк, изменяемое пользователем в одной транзакции. Существуют некоторые ограничения на использование больших значений этого параметра.
Вы также можете увеличить время отклика формы за счет использования свойства "WHERE Clause", в котором вы можете указать критерий выборки. Если же все-таки вам необходимо вернуть все записи, а не отобранные по какому-либо критерию, вы можете использовать предикаты, которые повлияют на план выполнения запроса. Если ваша таблица содержит первичный ключ или любой другой столбец, имеющий индекс, вы можете сделать так, чтобы оптимизатор пошел не по пути полного просмотра таблицы (FULL SCAN), а использовал при просмотре индекс. Чтобы понять, как это сделать, выполните пример, который приведен ниже.
- Зайдите в SQL*Plus или любое другое доступное GUI-средство, например, Sql Developer.
- Создайте таблицу Test:
CREATE TABLE test as SELECT ROWNUM VAL FROM (SELECT * FROM DUAL CONNECT BY LEVEL<=10000)
- Если вы используете SQL*PLUS, то выполните команду утилиты для включения просмотра плана выполнения запроса:
SET autotr ON
- Выполните запрос на выборку всех записей и посмотрите на план выполнения запроса – в нем для просмотра таблицы был выбран метод FUUL SCAN.
- Создайте индекс на столбец VAL таблицы Test, для этого выполните команду SQL:
CREATE INDEX I$VAL ON Test (val);
- Повторите запрос на выборку всех записей и посмотрите на план выполнения запроса – он не изменился, оптимизатор все так же выполняет полное сканирования таблицы. Чтобы изменить план запроса, добавьте предикат в условие WHERE:
SELECT * FROM Test WHERE val<=100000
- Посмотрите план выполнения запроса – он изменился. Мы всего лишь добавили предикат с условием, которое будет истинно в любом случае, так как в нашем столбце максимальное значение 10000. Вы можете делать то же самое и с оператором BETWEEN, указывая нереальные граничные значения.
Из этого примера можно сделать вывод, что вы можете также добавлять нереальные граничные значения в "WHERE Clause" блока и влиять тем самым на время отклика формы, так как выбор по индексу в таблице с большим объемом данных – это всегда быстрее, чем полный просмотр таблицы.