2013年3月27日水曜日

エラー(Exception)のハンドリング方法 DB編

データベースI/O時に発生する予期しないエラー(SQLException)をハンドリングするにはError_Handerルールを使用します。各オブジェクト(トランザクション/プロシージャ/Webパネル)に以下の内容を定義します。



・Rules(ルール)セクションにてError_Handler(エラーハンドラー)ルールを定義します。これにより、エラーつまりSQLExceptionが発生した時に、呼び出されるサブルーチンを定義できます。
Error_Handler('サブルーチン名');

・Source(ソース:プロシージャ)又はEvents(イベント:トランザクション/Webパネル)セクションにて、エラーハンドリング用のサブルーチンを定義します。
Sub 'サブルーチン名'

  //エラー処理を記述

Endsub

エラーハンドル用サブルーチンでは、システム予約された変数を参照する事により、エラーの内容を取得する事ができます。以下の変数はVariablesセクションで変数宣言する必要はありません。直接コード内で記述可能です。
変数名データ型説明
&ErrNumeric(4)GeneXusの標準エラーコード又は999がセットされます
1重複キーエラー
(Duplicate record)
101ファイルの終端
(End of file)
103ロックエラー
(Object locked (record or file))
105オブジェクトが存在しない
(Object not found)
106データベースが既に存在する
(Database already exists)
500親主キーが存在しない
(Parent primary key not found)
999予期しないDBMSエラー
(Unexpected DBMS error) : 


変数名データ型説明
&gxDBErrNumeric(5) DBMSのエラーコードが設定されます。設定されるのは&Errが500よりも大きい場合です。それ以外の場合は未定義です。
&gxDBTxtCharacter(255) DBMSのエラーメッセージが設定されます。設定されるのは&Errが500よりも大きい場合です。それ以外の場合は未定義です。
&gxOperCharacter(30) エラーが発生した時の操作が設定されます。設定される値は : Declare Fetch Insert Update Delete
&gxErrTblCharacter(30) エラーが発生した時にアクセスしていたテーブル名(もしあれば)が設定されます。テーブルにアクセスする操作時でない場合(データベースの作成やリモートプロシージャコールなど)は'N/A'が設定されます。
&gxErrOptNumeric(1) error_handlerのリターンコードとして使用されます。この変数に設定された値により、error_hander後の挙動が変わります。
0 = 処理を続行します。(エラーは無視されます)
1 = 処理を再実行します。
2 = アプリケーションの実行を中止します。
3 = GeneXusの既定の処理を実行します。



0 件のコメント:

コメントを投稿