我有一个 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- 使用设置的相同条件执行用户执行的最后一个查询?
任何帮助将不胜感激。