У меня есть форма 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- Выполнить последний запрос, который выполнил пользователь, используя те же критерии, которые были установлены?
Любая помощь будет высоко оценена.