2013-01-14 44 views
1

我有一個由多個列組成的數據塊的Oracle Forms 6i表單。如何在動態更改ORDER_BY子句時在Oracle Forms中重複查詢?

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

用戶可以按下F7(在查詢模式下,以輸入,例如,他/她的類型在DEPARTMENT領域first_name和H%JOH%),然後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-執行用戶已執行的最後一個查詢,使用相同的標準,設置?

任何幫助將不勝感激。

回答

2

你可以得到塊的最後查詢與get_block_property內置功能:

GET_BLOCK_PROPERTY('EMPLOYEE', LAST_QUERY); 
+0

非常感謝。使用SUBSTR隔離WHERE條件後,解決了我的問題 – Ahmad

1

另一種選擇是在表格上提供的,而不是使用QBE的功能單獨的搜索字段(S)。