エラーを処理するコールバック関数を登録します。
void ULRegisterErrorCallback ( SQLCA * sqlca, ul_error_callback_fn callback, ul_void * user_data, ul_char * buffer, size_t len );
sqlca SQLCA へのポインタ。
C++ API では、Sqlca.GetCA メソッドを使用します。
callback コールバック関数の名前。この関数のプロトタイプの詳細については、ULRegisterErrorCallback のコールバック関数を参照してください。
コールバック値に UL_NULL を指定すると、以前に登録したコールバック関数が無効になります。
user_data グローバル変数の代わりに、コンテキスト情報をグローバルにアクセスできるようにします。コールバック関数はアプリケーションの任意のロケーションから呼び出すことができるため、このパラメータは必須です。提供するデータが Ultra Light によって変更されることはありません。コールバック関数の起動時に、データだけが渡されます。
データ型を宣言し、コールバック関数内の適切なデータ型にキャストできます。たとえば、コールバック関数に次の形式の行を指定できます。
MyContextType * context = (MyContextType *)user_data; |
buffer NULL ターミネータを含む、エラー・メッセージの代入パラメータが格納されている文字配列。Ultra Light をできるだけ小さくするために、Ultra Light では、エラー・メッセージ自体を提供することはありません。代入パラメータは、個々のエラーによって異なります。完全なリストについては、SQL Anywhere のエラー・メッセージを参照してください。
バッファは、Ultra Light がアクティブな間、存在します。パラメータ情報を受け取る必要がない場合は、UL_NULL を指定します。
len ul_char 文字単位 の buffer (前述のパラメータ) の長さ。値が 100 であれば、ほとんどの場合、エラー・パラメータを保持するのに十分な長さです。バッファが小さすぎる場合、パラメータはトランケートされます。
この関数を呼び出すと、Ultra Light がエラーを通知するたびに、ユーザ指定のコールバック関数が呼び出されます。このため、SQLCA を初期化した直後に ULRegisterErrorCallback を呼び出してください。
このコールバック関数を使用するエラー処理では、発生するすべてのエラーがアプリケーションに通知されるため、開発中は特に効果的です。ただし、コールバック関数は実行フローを制御するわけではないので、アプリケーションでは Ultra Light 関数の呼び出し後に必ず SQLCA の SQLCODE フィールドを確認してください。
次のコードは、Ultra Light C++ コンポーネント・アプリケーションのコールバック関数を登録します。
int main() { ul_char buffer[100]; DatabaseManager * dm; Connection * conn; Sqlca.Initialize(); ULRegisterErrorCallback( Sqlca.GetCA(), MyErrorCallBack, UL_NULL, buffer, sizeof (buffer) ); dm = ULInitDatabaseManager( Sqlca ); ... } |
コールバック関数のサンプルを次に示します。
ul_error_action UL_GENNED_FN_MOD MyErrorCallBack( SQLCA * Sqlca, ul_void * user_data, ul_char * message_param ) { ul_error_action rc = 0; (void) user_data; switch( Sqlca->sqlcode ) { // The following error is used for flow control - don't report it here case SQLE_NOTFOUND: break; case SQLE_ULTRALITE_DATABASE_NOT_FOUND: _tprintf( _TEXT( "Error %ld: Database file %s not found\n" ), Sqlca->sqlcode, message_param ); break; default: _tprintf( _TEXT( "Error %ld: %s\n" ), Sqlca->sqlcode, message_param ); break; } return rc; } |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |