SQLAllocHandle - ハンドルの割り当て

目的


仕様: DB2 CLI 5.0 ODBC 3.0 ISO CLI

SQLAllocHandle() は環境ハンドル、接続ハンドル、または ステートメント・ハンドルを割り当てます。

この関数は、ハンドル割り当て用の汎用関数であり、バージョン 2 の 使用すべきでない関数 SQLAllocConnect()SQLAllocEnv()、および SQLAllocStmt() を置き換えます。

構文

SQLRETURN   SQLAllocHandle   (SQLSMALLINT       HandleType,
                              SQLHANDLE         InputHandle,
                              SQLHANDLE         *OutputHandlePtr);

関数の引き数

表 30. SQLAllocHandle の引き数

データ・タイプ 引き数 用途 説明
SQLSMALLINT HandleType 入力 SQLAllocHandle() によって割り当てるハンドルのタイプ。 以下のいずれかの値でなければならない。

SQL_HANDLE_ENV

SQL_HANDLE_DBC

SQL_HANDLE_STMT

SQLHANDLE InputHandle 入力 割り当てようとする新しいハンドルのコンテキストとして使用する既存のハンドル。 HandleType が SQL_HANDLE_ENV である場合、SQL_NULL_HANDLE である。 HandleType が SQL_HANDLE_DBC である場合、環境ハンドルで なければならない。SQL_HANDLE_STMT の場合は、接続ハンドルでなければならない。
SQLHANDLE OutputHandlePtr 出力 新しく割り当てたデータ構造にハンドルを戻すためのバッファーへのポインター。

使用法

SQLAllocHandle() は、以下に示すように、環境ハンドル、接続ハンドル、 およびステートメント・ハンドルを割り当てるために使用します。

1 つのアプリケーションによって一度に複数のステートメント・ハンドルを割り当て ることができます。

すでに存在している環境、接続、ステートメント、または 記述子ハンドルに対して設定されている *OutputHandlePtr を指定 してアプリケーションで SQLAllocHandle() を呼び出すと、DB2 CLI はハ ンドルに関連する情報 を上書きします。DB2 CLI では、*OutputHandlePtr に入力されたハ ンドルがすで に使用中であるかどうかのチェックは行いません。また、上書きの前に、ハン ドルの直前の内容をチェックすることもしません。

DB2 Everyplace の場合、ステートメント・ハンドルを除くすべてのハンドルは ダミー・ハンドルであり、使用可能な情報を持っていません。

ステートメント・ハンドルでは、エラー・メッセージ、および SQL ステートメント処理 に関する状況情報などの、ステートメント情報へのアクセスが行えます。 ステートメント・ハンドルを要求するには、アプリケーションでデータ・ソースに 接続した後 SQLAllocHandle() を呼び出して、その後で SQL ステート メントを実行依頼します。 この呼び出しのとき、HandleType を SQL_HANDLE_STMT に設定する とともに、InputHandle に関しては、そのハンドルを割り当てた SQLAllocHandle() への呼び出しが戻してきた接続ハンドルに設定す る必要があります。 DB2 CLI は、ステートメント・ハンドルを割り当てて、そのス テートメント・ハンドルを指定された接続に関連付け、関連付けされたハンドルの値を *OutputHandlePtr に戻します。 アプリケーションでは、ステートメント・ハンドルを要求した後続のすべての呼び 出し時に *OutputHandlePtr 値を渡します。

アプリケーションが終了すると、そのアプリケーションに割り当てられたすべて の DB2 Everyplace リソースが解放されるため、そのアプリケーションが使用 していたハンドルは無効になります。

DB2 Everyplace の場合、アプリケーションによって変更される可能性がある属性 を持つステートメント・ハンドルに関連する記述子はありません。

Visual Basic と DB2 Everyplace CLI/ODBC インターフェースで DB2 Everyplace を使用する場合は 、sqlcli.h で定義されているマップ/基礎 CLI 関数を明示的に呼び出さなければなりません。

例えば、SQLAllocHandle() の呼び出しは失敗します。 SQLAllocHandleVer(SQL_HANDLE_STMT, hdbc, hstmt, DB2eVersion) の呼び出しは成功します。

戻りコード

環境ハンドル以外のハンドルを割り当てる際に SQLAllocHandle() が SQL_ERROR を戻す場合、 SQLAllocHandle() は出力引き数がヌル・ポインターでなければ、 OutputHandlePtr を SQL_NULL_HENV、SQL_NULL_HDBC、または SQL_NULL_HSTMT に設定します。 このうちのどれに設定されるかは、HandleType の値によって決まります。 この後、アプリケーションは、InputHandle 引き数内のハンドルに関連する 診断データ構造から追加情報を入手することができます。

診断

表 31. SQLAllocHandle の SQLSTATE

SQLSTATE 説明 解説
01000 警告。 通知メッセージ。(関数は、SQL_SUCCESS_WITH_INFO を戻す。)
08003 接続がクローズしている。 HandleType 引き数が SQL_HANDLE_STMT であるが、 InputHandle 引き数によって指定された接続がオープンされていない。 DB2 CLI でステートメント・ハンドルを割り当てるためには、接続処理を正常に 完了する (接続をオープンする) 必要がある。
HY000 一般エラー。 エラーは発生したが、特定の SQLSTATE は無い。 SQLGetDiagRec()*MessageText バッファーに戻したエラー・メッセージが、 エラーとその原因を示しています。
HY001 メモリー割り振りエラー。 DB2 CLI が、指定されたハンドル用のメモリーを割り当てることができない。
HY013 予期しないメモリー処理エラー。 HandleType 引き数は SQL_HANDLE_DBC または SQL_HANDLE_STMT であるが、 低メモリー状態が原因で、基礎となるメモリー・オブジェクトにアクセスできないため、関数呼び出しを処理できない。
HY014 ハンドル数の限界に到達済み。 HandleType 引き数によって示されたハンドルのタイプに割り当てる ことができるハンドル数の限界に到達した。
HY092 オプション・タイプが範囲外。 HandleType 引き数が以下のいずれでもない。

SQL_HANDLE_ENV

SQL_HANDLE_DBC

SQL_HANDLE_STMT

関連した解説