Язык программирования баз данных Informix-4GL

         

Операторы языка Informix-L для работы с экранными формами


Операторы языка Informix-4GL обеспечивают следующий набор действий с экранной формой:

  • открытие экранной формы (OPEN FORM);
  • отображение экранной формы (DISPLAY FORM);
  • отображение данных в экранную форму (DISPLAY);
  • отображение программного массива в экранном массиве с обеспечением скроллирования массива (DISPLAY ARRAY);
  • ввод данных через экранную форму (INPUT);
  • ввод данных через экранный массив (INPUT ARRAY);
  • закрытие экранной формы (CLOSE FORM).
  • Оператор OPEN FORM связывает идентификатор Informix-4GL form-name c откомпилированным файлом экранной формы и должен предшествовать всем операциям с экранной формой.

    Оператор DISPLAY FORM отображает экранную форму, начиная с третьей строки (если это не изменено предложением ATTRIBUTE оператора OPEN WINDOW) экрана терминала или окна, возможно, со своими атрибутами, определяющими цветовую гамму.

    Отметим, что указание опции WITH FORM в операторе OPEN WINDOW равносильно паре операторов OPEN FORM и DISPLAY FORM.



    Оператор DISPLAY в случае работы с формами позволяет:

  • отображать список программных переменных либо элементов программной записи, содержащих какую-либо информацию (в том числе и из таблиц базы данных) в указанные поля экранной формы с использованием имен полей экранных формы (DISPLAY . . . TO . . .);
  • отображать элементы программной записи (предварительно созданные по DEFINE variable-record RECORD . . . ) в поля экранной записи (DISPLAY variable-record.* TO screen-record.*);
  • отображать список программных переменных в поля экранной формы с использованием конструкции DISPLAY BY NAME . . . при условии совпадения имен программных переменных с именами полей экранной формы;
  • задавать при отображении данных собственные атрибуты, определяющие цветовую гамму.
  • Приведенный пример демонстрирует отображение значений программных переменных в поля экранной формы Example1.per в случае неидентичности имен переменных и имен полей, указанных в секции Attributes.

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




    Поскольку экранные записи являются лишь средством группирования полей экранной формы, работа с ними выполняется теми же операторами языка Informix-4GL, что и ввод/вывод в поля/из полей экранной формы: по каждому оператору DISPLAY элементы записи, определенной в 4GL-программе и имеющие те же характеристики, что и элементы экранной записи, отображаются в поля экранной формы, ассоциированные с этой экранной записью; по оператору INPUT выполняется обратная операция, по которой вводимые данные из полей экранной формы, составляющие экранную запись, переносятся в элементы программной записи. В обоих случая в 4GL-операторах указываются лишь имена программных и экранных записей.

    Если в секции Instructions экранной формы Example1.per из полей экранной формы описана экранная запись



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



    P ALIGN="JUSTIFY">Оператор INPUT позволяет:

  • вводить список указанных программных переменных через поля экранной формы, используя имена полей экранной формы (INPUT. . . FROM . . .);


  • вводить список программных переменных через поля экранной формы с использованием конструкции INPUT BY NAME . . . при условии совпадения имен программных переменных с именами экранных полей экранной формы;


  • вводить элементы программной записи (предварительно созданные по DEFINE variable-record RECORD . . . ) через поля экранной записи (INPUT variable-record.* FROM screen-record.*);


  • определять использование/не использование значений по умолчанию для полей формы (WITHOUT DEFAULTS);


  • задавать действия по обработке до/после ввода данных в поле (BEFORE FIELD/AFTER FIELD, а также контролировать вводимые значения;


  • определять порядок ввода данных в поля экранной формы (NEXT FIELD); при отсутствии NEXT FIELD порядок обхода полей экранной формы определяется последовательностью полей в списке INPUT;


  • определять действия, которые необходимо выполнить при нажатии указанных функциональных или управляющих клавиш (ON KEY);




  • использовать help-сообщения из help-файла (HELP);


  • проверять значение текущего поля с использованием функции infield(field), возвращающей значение true/false;


  • при необходимости прерывать ввод (EXIT INPUT).


  • Ввод данных по оператору INPUT завершается нажатием клавиши ESC, либо управляющей клавиши, определенной параметром ACCEPT KEY в операторе OPTIONS, либо нажатием клавиши RETURN после ввода последнего поля экранной формы при условии действия опции INPUT NO WRAP в операторе OPTIONS. В случае опции INPUT WRAP в операторе OPTIONS нажатие клавиши RETURN после ввода последнего поля экранной формы приводит к циклическому перемещению на первое поле экранной формы.



    Следующий пример демонстрирует ввод значений элементов программной записи из полей экранной записи и использование конструкции WITHOUT DEFAULTS.



    Ниже приведены примеры использования различных конструкций оператора INPUT.



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

    Оператор CLOSE FORM разрывает связь с экранной формой.

    Схема организации скроллирующего массива следующая:

  • в секции INSTRUCTIONS экранной формы определяется экранный массив;


  • в 4GL-программе оператором DEFINE определяется массив достаточной размерности, элементами которого являются записи, компоненты которых имеют те же атрибуты, что и поля экранной формы, ассоциированные с ней;


  • любыми средствами выбора данных из таблиц (fetch, foreach) заполняется указанный выше программный массив;


  • с помощью функции set_count() 4GL-программе указывается, сколько строк программного массива заполнено данными и подлежит последующему выводу;


  • оператором DISPLAY ARRAY выполняется отображение скроллирующего программного массива в экранный массив;


  • с помощью функций arr_curr(), scr_liпе() в любой момент можно получить номер текущей строки программного и экранного массивов соответственно;


  • в блоках ON KEY, ассоциированных с DISPLAY ARRAY, при необходимости определяются комбинации клавиш и программные действия, которые должны быть выполнены при нажатии этих клавиш.




  • Ниже приведен пример отображение данных в экранный массив s_items[5], описанный в экранной форме Example1.per.



    Средства организации скроллирующего массива на основе оператора DISPLAY ARRAY могут использоваться для создания вертикального меню. С этой целью организуется экранный массив, состоящий из одного или нескольких полей, и программный массив, содержащий либо фиксированные тексты, либо заполненный элементами строк некоторой таблицы. Функции scr_liпе(), arr_curr() позволяют отслеживать положение курсора на экране и внутри программного массива (пункта меню). С помощью конструкции ON KEY, связанной с оператором DISPLAY ARRAY, выполняется та или иная обработка, которая в общем случае может быть связана с пунктом меню, на котором находится курсор. После выполнения некоторой обработки присходит возврат в вертикальное меню (скроллирующий массив).



    Приведенный выше фрагмент 4GL-программы, выполняющий работу с вертикальным меню, использует экранную форму (Scroll.per), в которой описан экранный массив из шести записей.



    В отличие от оператора DISPLAY ARRAY, который позволяет лишь отображать скроллирующий массив записей, оператор INPUT ARRAY позволяет менять содержимое записей, удалять их и вставлять новые.

    Основные шаги при подготовке экранного массива и использовании оператора INPUT ARRAY те же, что и для оператора DISPLAY ARRAY. Дополнительно отметим возможность включения в этот оператор блоков BEFORE/AFTER INPUT, BEFORE/AFTER FIELD, аналогичных по назначению оператору INPUT и использование функций arr_count() для определения количества заполненных строк в программном массиве. После выполнения оператора INPUT ARRAY с учетом полученного числа строк в программном массиве выполняется обновление строк таблицы, которая ассоциирована с программным массивом.

    Ввод данных по оператору INPUT ARRAY так же, как и для INPUT, прерывается нажатием клавиши ESC, либо управляющей клавиши, определенной параметром ACCEPT KEY в операторе OPTIONS. Управляющие клавиши, определенные в параметрах INSERT KEY, DELETE KEY, NEXT KEY, PREVIOUS KEY оператора OPTIONS, служат соответствено для вставки, удаления строк в экранном массиве, а также перемещения страниц вперед и назад.

    Ниже приведен фрагмент программы , выполняющей ввод данных в экранный массив s_items[5], описанный в экранной форме Example1.per.






    Содержание раздела