1

我有一个 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_QUERYdefault_where. 问题是,last_query 可以从不同的表单引用不同的块,这在当前显示的数据块上无效。

如何一键完成以下操作:

1-更改ORDER_BY当前活动数据块的子句

并且: 2- 使用设置的相同条件执行用户执行的最后一个查询?

任何帮助将不胜感激。

4

2 回答 2

2

您可以使用 get_block_property 内置函数获取块的最后一个查询:

GET_BLOCK_PROPERTY('EMPLOYEE', LAST_QUERY);
于 2013-01-14T08:42:49.680 回答
1

另一种选择是在表单上提供单独的搜索字段,而不是使用 QBE 功能。

于 2013-01-24T07:02:52.850 回答