EOracleError

Top  Previous  Next

Unit

Oracle

宣言

type EOracleError = class(Exception)

説明

Oracleのエラーが発生すると常に、EOracleError例外が起こります。例外のエラーメッセージにはOracleによって生成されたメッセージが含まれます。例外は特定のエラーを扱うためのErrorCodeプロパティを含んでいます。この数字は"Oracle Server Messages Guide"内のコードに対応しています。

加えてEoracleErrorSessionプロパティを含み、それは例外が発生したTOracleSessionを表します。更に、例外を発生したTOracleSession, TOracleQuery, TLOBLocator, TOracleObject, TOracleReferenceTOracleDirectPathLoaderインスタンスであるInstanceプロパティを含みます。

EoracleErrorが起こるといつでも、グローバルOnOracleErrorイベントハンドラーが呼び出されます。このイベントハンドラーは

もしDelphi IDE内でTools:Environment-Options:Break-On-Exceptionオプションが使用可能になっていで、IDE内からアプリケーションを走らせていると、もし例外を例外をトラップにかけたとしてもDelphi常にアプリケーションを遮断し、IDEに帰ってきます。

次のサンプル内ではもしエラーが発生すると、例外ハンドラーはdemo tablesがインストールされているかどうかを判断するためのErrorCodeを調べます:

try

Query.Execute;  // select * from dept

...

except

on E:EOracleError do

begin

   if E.ErrorCode = 942 then // ORA-00942: Table or view does not exist

     ShowMessage('You must install the Employee/Department demo tables first');

   else

     ShowMessage(E.Message);

end;

end;

 

いつでもEoracleErrorが発生すると、グローバルOnOracleErrorイベントハンドラーが呼び出されます。このイベントハンドラーはOracleユニット内で次のように宣言されます:

type TOracleErrorEvent = procedure(Error: EOracleError);

var OnOracleError: TOracleErrorEvent = nil;

 

このイベントハンドラーをグローバルエラーロギングとメッセージ翻訳のために使うことができます。例えば:

procedure LogOracleError(Error: EOracleError);

var F: TextFile;

begin

Assign(F, 'error.log');

try

   Append(F);

except

   ReWrite(F);

end;

try

   // Write the date and time

   Write(F, FormatDateTime('c', Now));

   // Write the session name

   Write(F, ' > ' + Error.Session.Name);

   // Write the component name if applicable

   if Error.Instance is TComponent then

     Write(F, '.' + TComponent(Error.Instance).Name);

   WriteLn(F);

   // Write the message

   WriteLn(F, Error.Message);

finally

   Close(F);

end;

end;

 

initialization

Oracle.OnOracleError := LogOracleError;

 

end.