最近のアクセス:
error_handler ルール

プログラムの実行時にデータベースに関連するエラーが発生した場合に、ユーザーが独自の処置を取れるようにします。トランザクションエラーや接続エラーが発生すると、ユーザー定義のルーチンが実行されます。

構文

Error_Handler(‘subname');

入力値の説明:
subname
このルールを使用するプログラムに含まれるサブルーチンの名前です。

説明

error_handler ルールは宣言型です。アクティブな error_handler コマンドがなければ、プログラム全体のどこでも適用されます。

ルール/コマンドの適用範囲は、これを使用するプログラムでのみ考慮されます。つまり、このルールを使用するプログラムで呼び出されるどのプログラムにも影響しません。このルールを使用するプログラムが別のプログラムを呼び出し、呼び出されたプログラムでも同じルールを使用する場合は、呼び出し元のプログラムに属するルールは、呼び出されたプログラムで無視されるため、プログラムごとにルールを定義する必要があります。つまり、このルールは、それを使用するプログラムのみに制限されます。

error_handler プログラムは、実行時にデータベースに関連するエラーが検知されるたびに呼び出されます。このプログラムは、パラメーターを受け取りませんが、GeneXus に発生した問題を識別するために使用できる、次のような &err グローバル変数があります。
名前
データタイプ
説明
&Err
Numeric(4)
GeneXus の標準エラーコードや、未定義のデータベース エラー コードを検知した場合の 999 を含みます。エラーを識別できるようにする場合は、この変数を使用することをお勧めします。GeneXus の別のプラットフォームにプログラムに移植しやすくなります。次に、&Err の値とその意味を示します:
1                       レコードが重複しています。
101                   ファイルの最後です。
103                   オブジェクトがロックされています (レコードまたはファイル)。
105                   オブジェクトが見つかりません。
106                   データベースが既に存在します。
500                   親の主キーが見つかりません。
600                   参照整合性エラーが発生しました (Java ジェネレーターのみ)。
999                   予期しない DBMS エラーの発生です。
また、次の変数を定義して、データベースに由来するエラーコードと説明に関する詳細情報を受け取ることができます。
名前
データタイプ
説明
&gxDBErr
Numeric(5)  
ネイティブの DBMS エラーコードを含みます。&Err が 500 より大きい場合のみ値が設定されます。それ以外の場合は、未定義になります。
&GxDbSqlState Character(5)
ネイティブの SQLSate エラーコードを含みます。
&gxDBTxt
Character(255) 
ネイティブの DBMS エラーメッセージを含みます。&Err が 500 より大きい場合のみ値が設定されます。それ以外の場合は、未定義になります。
&gxOper
Character(30)  
エラーを検知した時点で実行中だった操作の説明を含みます。この変数の値は、次のいずれかです: Declare、Fetch、Insert、Update、Delete
&gxErrTbl
Character(30)  
エラーが発生したときにアクセスしていたテーブル (ある場合) の名前を含みます。データベースの操作 (データベースの作成やリモートプロシージャーの呼び出しなど) に関連するテーブルがない場合は、「N/A」という特別な値が含まれます。
&gxErrOpt
Numeric(1)  
error_handler によって返されるコード。error_handler で設定された値によって、プログラムで行われる動作が異なります。
0 = エラーを無視し、処理を継続します。
1 = 操作を再試行します ( [ Lock retry count ] プロパティを使用して、指定された回数試行します)。試行後もエラーが解消されない場合は、処理を続行します。
2 = アプリケーションの実行をキャンセルします (SQL エラーがあると、アプリケーションをキャンセルします)。
3 = GeneXus の既定の処理を行います (既定値) (エラーハンドラーのないプログラムと同じように動作します (ロックや重複などのエラーは無視されますが、それ以外はアプリケーションの実行をキャンセルします))。

  • &gxErrOpt が 0 または 1 に設定されている場合、GeneXus で生成されたコードで取得されているため、標準出力ではエラーは表示されません。
  • これらの変数はグローバルではありませんが、Error_handler ルールまたはコマンドを持つ各オブジェクトで使用できます。
  • すべての DBMS の例外は、error_hanlder ルールまたはコマンドによってキャッチされます。標準変数は次の場合にロードされます:
    • &gxDBErr および &gxDBTxt は、どのような場合でもロードされます。
    • &gxDBSqlState は、次でロードされます:
      • Java
        • すべての DBMS
      • .NET
        • PostgreSQL
        • Informix
      • .NET Core:
        • MySQL
        • PostgreSQL

ルール:

error_handler('DBErrors');

イベント:

Sub 'DBErrors'
    If &Err = 1
        Msg('Duplicate record')
    Endif 
EndSub

適用範囲

オブジェクト: ProcedureTransactionWeb Panel
、言語: .NET、Java、.NET Core

参考情報

error_handler コマンド

 


サブページ
Created: 14/09/18 03:19 by Admin Last update: 21/12/21 18:22 by Admin
カテゴリ
Powered by GXwiki 3.0