Как повторить запрос в Oracle Forms при динамическом изменении предложения ORDER_BY?

У меня есть форма Oracle Forms 6i с блоком данных, состоящим из нескольких столбцов.

------------------------------------------------------------------------------
| FIRST_NAME | LAST_NAME | DEPARTMENT | BIRTH_DATE | JOIN_DATE | RETIRE_DATE |
------------------------------------------------------------------------------
|            |           |            |            |           |             |
|            |           |            |            |           |             |
|            |           |            |            |           |             |
|            |           |            |            |           |             |
------------------------------------------------------------------------------

Пользователь может нажать F7 (чтобы войти в режим запроса, например, он/она набирает JOH% в поле first_name и H% в поле DEPARTMENT), затем F8 для выполнить запрос и посмотреть результаты. В этом примере будет показан список всех сотрудников, чья фамилия начинается с JOH и работает в любом отделе, начинающемся с H. Вот пример вывода этого запроса

------------------------------------------------------------------------------
| FIRST_NAME | LAST_NAME | DEPARTMENT | BIRTH_DATE | JOIN_DATE | RETIRE_DATE |
------------------------------------------------------------------------------
| MIKE       | JOHN      | HUMAN RES. | 05-MAY-82  | 02-FEB-95 |             |
| BEN        | JOHNATHAN | HOUSING    | 23-APR-76  | 16-AUG-98 |             |
| SMITH      | JOHN      | HOUSING    | 11-DEC-78  | 30-JUL-91 |             |
|            |           |            |            |           |             |
------------------------------------------------------------------------------

Затем я добавил небольшую кнопку поверх каждого столбца, чтобы пользователь мог сортировать данные по нужному столбцу, выполнив триггер WHEN-BUTTON-PRESSED:

set_block_property('dept', order_by, 'first_name desc');

Хорошая новость заключается в том, что ORDER_BY меняется. Плохая новость заключается в том, что пользователь никогда не заметит изменения, потому что ему нужно будет сделать еще один запрос и выполнить его, чтобы увидеть вывод, упорядоченный по выбранному столбцу. Другими словами, пользователь заметит изменение только в следующем запросе, который он/она выполнит.

Я попытался автоматически выполнить запрос при изменении предложения ORDER_BY следующим образом:

set_block_property('dept', order_by, 'first_name desc');
go_block('EMPLOYEE');
do_key('EXECUTE_QUERY');
/* EXECUTE_QUERY  -- same thing */

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

Я тоже искал решение этой проблемы и большинство из них касается SYSTEM.LAST_QUERY и default_where. Проблема в том, что last_query может ссылаться на другой блок из другой формы, что недопустимо для текущего отображаемого блока данных.

Как можно сделать следующее всего одним нажатием кнопки:

1- Измените предложение ORDER_BY текущего активного блока данных.

и: 2- Выполнить последний запрос, который выполнил пользователь, используя те же критерии, которые были установлены?

Любая помощь будет высоко оценена.


person Ahmad    schedule 14.01.2013    source источник


Ответы (2)


Вы можете получить последний запрос блока с помощью встроенной функции get_block_property:

GET_BLOCK_PROPERTY('EMPLOYEE', LAST_QUERY);
person Alen Oblak    schedule 14.01.2013
comment
Большое Вам спасибо. Это решило мою проблему после использования SUBSTR для изоляции условий WHERE - person Ahmad; 14.01.2013

Другим вариантом является предоставление отдельных полей поиска в форме вместо использования функции QBE.

person Jeffrey Kemp    schedule 24.01.2013