Запросы по образцу
Informix-4GL содержит средства, позволяющие использовать экранную форму и несколько другим путем: помещая литеральные значения и ограничения на значения в поля экранной формы во время выполнения программы, пользователь формирует условия для запроса. Такой процесс называется запросом по образцу (Query-by-example). Оператор CONSTRUCT используется для создания переменной типа Char и формирования булевого выражения, построенного на экранном запросе Query-by-example. Указанный оператор в значительной степени похож на оператор INPUT и содержит список имен столбцов базы данных и список имен полей экранной формы, ассоциированных с этими столбцами. При совпадении имен полей экранной формы и имен столбцов конструкция BY NAME позволяет исключить из оператора CONSTRUCT список имен полей экранной формы. Конструкции BEFORE (AFTER) FIELD, BEFORE (AFTER) CONSTRUCT, ON KEY в операторе CONSTRUCT используются аналогично соответствующим конструкциям оператора INPUT. При вводе параметров поиска Query-by-example необходимо придерживаться следующего синтаксиса:
Символ | Значение | Тип данных | Использование |
= | равно | все | по умолчанию |
> | больше | все | >x |
< | меньше | все | >x |
>= | больше или равно | все | >=x |
<= | меньше или равно | все | <=x |
<> | не равно | все | <>x |
: | диапазон | все | x:y |
* | ноль или больше символов | Char | *x, x*, *x* |
? | один символ | Char | ?x, x?, ?x?, x?? |
. . | диапазон | Datetime, Interval | x . . y |
| | или | все | x | y |
Ввод в поле значения литерала равносильно формированию условия равенства на значение соответствующего столбца.
Ввод данных по оператору CONSTRUCT так же, как и для оператора INPUT завершается нажатием клавиши ESC, либо управляющей клавиши, определенной параметром ACCEPT KEY в операторе OPTIONS, либо нажатием клавиши RETURN после ввода последнего поля экранной формы при условии действия опции INPUT NO WRAP в операторе OPTIONS. В случае опции INPUT WRAP в операторе OPTIONS нажатие клавиши RETURN после ввода последнего поля экранной формы приводит к циклическому перемещению курсора на первое поле экранной формы.
Если после окончания ввода критерия поиска в поля экранной формы ни в одно из полей не введено значений, сформированное условие в текстовой переменной, указанной в операторе CONSTRUCT, имеет вид " 1=1".
На основании введенных данных в поля экранной формы в текстовой переменной, указанной в операторе CONSTRUCT, формируется булевое выражение, которое впоследствии может использоваться при формировании оператора SQL:
Отметим два 4GL-оператора общего использования, полезных при разработке программных приложений. Оператор WHENEVER с опциями GOTO, CALL, CONTINUE позволяет определить действия, которые необходимо выполнить в случае возникновения ошибок при исполнении программы. Данный оператор особенно полезен при динамическом формировании операторов, когда в тексте оператора возможны ошибки. Отслеживая состояние системных переменных sqlca.sqlcode и STATUS пользователь сам обрабатывает возникающие ошибки. Значение по умолчанию для ERROR - STOP, для WARNING - CONTINUE. Оператор DEFER запрещает прерывание ввода (обычно DEL или Control-C) и прерывание программы (Control-\).