複数の列で構成されるデータブロックを持つOracleForms6iフォームがあります。
------------------------------------------------------------------------------
| FIRST_NAME | LAST_NAME | DEPARTMENT | BIRTH_DATE | JOIN_DATE | RETIRE_DATE |
------------------------------------------------------------------------------
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
------------------------------------------------------------------------------
ユーザーはF7(クエリモードで入力するには、たとえば、フィールドにJOH%と入力し、フィールドfirst_name
にH%と入力します)を押してから、クエリを実行して結果を確認できます。この例では、名前がJOHで始まり、Hで始まる部門で働いているすべての従業員のリストが表示されます。これがそのクエリの出力例ですDEPARTMENT
F8
------------------------------------------------------------------------------
| 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回押すだけで、次のことができます。
1-ORDER_BY
現在アクティブなデータブロックの句を変更します
および:2-設定されたのと同じ基準を使用して、ユーザーが最後に実行したクエリを実行しますか?
どんな助けでも大歓迎です。