|
EOracleError |
Top Previous Next |
|
Unit 宣言 type EOracleError = class(Exception) 説明 Oracleのエラーが発生すると常に、EOracleError例外が起こります。例外のエラーメッセージにはOracleによって生成されたメッセージが含まれます。例外は特定のエラーを扱うためのErrorCodeプロパティを含んでいます。この数字は"Oracle Server Messages Guide"内のコードに対応しています。 加えてEoracleErrorはSessionプロパティを含み、それは例外が発生したTOracleSessionを表します。更に、例外を発生したTOracleSession, TOracleQuery, TLOBLocator, TOracleObject, TOracleReferenceかTOracleDirectPathLoaderインスタンスである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. |