2017-04-25 10 views
0

誰かが私がテキストボックスで使用できる良いトリガーを提案することができます。テキストボックスで使用する予定の操作は、ユーザーがテキストボックスの値を変更したときに、データベーステーブルのその値をコミットで更新するプロシージャを呼び出します。ただし、ユーザーが値を変更してEnterキーを押すと、次の項目に移動してからDBを更新する必要があります。 KEY-NEXT-ITEMトリガーで正常に動作します。しかし、1つの問題は、ユーザーがfldの値を変更するが、タブまたはEnterを押すのではなく、直接F10を押してコミットするということです。テキストボックス(つまり、KEY-NEXT-ITEM)のトリガーは起動しません。 POST-TEXT-ITEMを試しましたが、COMMITまたはNEXT_ITEM組み込み関数を使用することはできません。ユーザーがアイテムを終了した瞬間にトリガーが起動し、フォーム内の次のアイテムに移動します。ポストテキストアイテムはコミットを受け入れることができません

答えて

1

WHEN-VALIDATE-ITEMトリガーを使用します。このトリガーは基本的にユーザーが入力した値を検証することを目的としています。フォームが決定したとき、ユーザーがフィールド値を終了するたびにユーザーがフィールドを離れるとき、ユーザーがコミットを押したときなどに起動します。

残念ながら、このトリガーでCOMMIT_FORMを使用することはできません。フォームでは、トランザクショントリガーでのみデータベースを直接変更することを推奨しています。 ... たくさんの感謝を

CREATE OR REPLACE PROCEDURE do_somethning (some_id NUMBER, some_value VARCHAR2) AS 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    UPDATE some_table SET some_column = some_value 
    WHERE table_id = some_id; 
    COMMIT; 
END do_somethning; 

YoutのWHEN-VALIDATE-ITEMトリガーは素晴らしいアイデアだこの

BEGIN 
    -- probably do some validations 
    ... 
    -- call your procedure 
    do_something(:some_block.id, :some_block.your_field); 
END; 
+0

のようにすることができます:、コミットデータベース手順は自律型トランザクション内で実行させると、データベースの変更を実装するには注:私が「PRAGMA AUTONOMOUS_TRANSACTION;」を使用したときそれは私にORA-00060デッドロックが検出された を検出しましたが、削除したときにうまくいきました。 ありがとうございました –

+0

おそらくフォームで選択されたものと同じデータベースレコードを変更しています。これは望ましい動作ですか? –

+0

はい、これは私が欲しいものです –

関連する問題