Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Ultra Light - C/C++ プログラミング » API リファレンス » Ultra Light C/C++ 共通 API リファレンス

 

ULRegisterErrorCallback 関数

エラーを処理するコールバック関数を登録します。

構文
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;
}
参照