# CHAPTER 4: Empress ODBC 3.5 クライアント

## 4.1 はじめに

Empress ODBC 3.5 クライアントは (PC Windows プラットフォームではダイナミックリンクライブラリ) Empress コネクティビティ(ODBC) サーバー側と ユーザーアプリケーション側の相互作用をするための ODBC 関数コールを実装したライブラリです。 Empress コネクティビティ(ODBC) サーバーは Empress ODBC からEmpress ODBC ダイナミック SQL モジュール （Empress RDBMS のEmpress データベースエンジン）へ リクエストを渡します。 ダイナミック SQL モジュールはそのリクエストを処理し、結果を返します。

Empress ODBC ドライバと Empress ローカル アクセス ドライバは マイクロソフト ODBC 3.0 プログラマーズ リファレンス および SDK ガイド に従ったマイクロソフトODBC 3.5 クライアントです。

Empress ODBC クライアントはマルチスレッドクライアントですが、 それはSQLステートメントを処理するのではなく ODBC 呼び出しを処理することを意味する マルチスレッドクライアントです。 クライアントは SQL ステートメントを処理するために Empress コネクティビティ (ODBC)サーバーへ渡します。 ODBC 標準は、2つの適合範囲を定義します: ODBC API 準拠レベル およびODBC SQL準拠レベルで、 Empress ODBC　クライアントは以下に応じます。

- ODBC コア SQL 文法準拠レベル
- ODBC レベル 1 API 準拠レベル
- ODBC レベル 2 API 準拠レベル

SQL文法準拠レベルとAPI準拠レベルについてのより詳細な情報は マイクロソフト ODBC 3.0 プログラマーズ リファレンス および SDK ガイド を参照してください。

## 4.2 ODBC コアレベル API 関数

Empress ODBC クライアントがサポートするODBC コアレベル ODBC API 関数を 以下に示します。

表 4-1: ODBC コアレベル ODBC API 関数

関数名 | 説明
`SQLAllocHandle` | odbc ハンドルの取得
`SQLBindCol` | 結果カラムのための領域の割り当てとデータ・タイプの指定
`SQLBindParameter` | SQL ステートメント内のパラメータの関連付け（バインド）
`SQLCancel` | SQL ステートメントのキャンセル
`SQLCloseCursor` | オープンされているステートメントおよび 途中の結果を廃棄するためのカーソルのクローズ
`SQLColAttribute` | 結果のセットのカラム属性を返す
`SQLColumns` | 指定されたテーブル中のカラム名のリストを返す
`SQLConnect` | データソース名、ユーザーID、パスワードにより 指定されたドライバに接続する
`SQLCopyDesc` | あるディスクリプタ・ハンドルから別のハンドルディスクリプタ情報をコピーする
`SQLDescribeCol` | 結果セットのカラム属性を返す
`SQLDisconnect` | コネクションの切断
`SQLDriverConnect` | SQLConnect の拡張
`SQLEndTran` | 接続に関連したすべてのステートメントに対する 有効なオペレーションに対しコミットまたはロールバックの オペレーションを要求する
`SQLExecDirect` | ステートメントの実行
`SQLExecute` | 準備したステートメントの実行
`SQLFetch` | 結果の1行を返す
`SQLFetchScroll` | 指定した行セットのデータを結果セットから取り出し、すべてのバインドされたカラム のデータを戻す
`SQLFreeHandle` | 特定の環境、接続、ステートメント、または記述子の各ハンドルに関連する リソースを解放する
`SQLFreeStmt` | 特定のステートメントに関連した停止処理、 ステートメントに関連した開いているカーソルを閉じ、 また途中の結果を廃棄する。 ステートメント・ハンドルに関連したリソースをすべて解放
`SQLGetConnectAttr` | 接続属性の現在のセッティングを返す。
`SQLGetCursorName` | ステートメント・ハンドルに関連したカーソル名を返す
`SQLGetData` | 結果セット中の１つのカラムのデータを取得する
`SQLGetDescField` | 記述子レコードの単一フィールドの現在の設定および値を返す
`SQLGetDescRec` | 記述子レコードの複数フィールドの現在の設定および値を返す
`SQLGetDiagField` | エラー、警告、およびステイタス情報が含まれている 診断のデータ構造（特定のハンドルと関連付けられた）レコード フィールドの現在の値を返す
`SQLGetDiagRec` | エラー、警告、およびステイタス情報が含まれている 診断のレコードの複数のフィードの現在の値を返す
`SQLGetEnvAttr` | 現在の設定されている環境属性を返す
`SQLGetInfo` | 一般的なドライバに関する情報および接続に関連したデータソース情報を返す
`SQLGetStmtAttr` | ステートメント属性の現在の設定値を返す
`SQLGetTypeInfo` | データソースによってサポートされているデータタイプに関する情報を返す
`SQLNativeSql` | ドライバによって修正されたSQL を返す
`SQLNumParams` | SQL ステートメント内のパラメーター数を返す
`SQLNumResultCols` | 結果セット内のカラム数を返す
`SQLParamData` | 長いデータを分割して送るために SQLPutData() と組み合わせて使用する
`SQLPrepare` | 後に実行するためのSQLステートメントの準備
`SQLPutData` | アプリケーションがステートメント実行時にドライバへ パラメーターまたはカラムのためにデータを送ることを可能にする
`SQLRowCount` | insert、update またはdelete リクエストに影響を受けた表中の行数を返す
`SQLSetConnectAttr` | 接続の各局面を管理する属性の設定
`SQLSetCursorName` | カーソル名の設定
`SQLSetDescField` | 記述子レコードの単一フィールドの値の設定
`SQLSetDescRec` | カラムまたはパラメーター・データにバインドされているデータ・タイプと バッファに影響を与える複数の記述子フィールドの設定
`SQLSetEnvAttr` | 環境の各局面を管理する属性の設定
`SQLSetStmtAttr` | ステートメントに関連した属性の設定
`SQLSpecialColumn` | 特定のテーブル内のカラムについての以下の情報を取得する テーブル中のユニークな行を識別するカラムの最適なセット。 カラムの中のどのような値もトランザクションによって更新される 場合、自動的に更新されるカラム。
`SQLStatictics` | テーブルに関連した単一のテーブルおよびインデックスに関する統計のリストを 取得する。
`SQLTables` | 特定のデータソースに管理されているテーブルリスト、カタログ、スキーマ名、 テーブルタイプを返す。

## 4.3 ODBC レベル 1 ODBC API 関数

Empress ODBC クライアントがサポートするODBC レベル 1 ODBC API 関数を 以下に示します。

表 4-2: ODBC レベル 1 ODBC API 関数

関数名 | 説明
`SQLBrowseConnect` | 接続属性および有効な属性値の連続したレベルを返す　 値が各接続属性のために指定された場合、データソースに接続する
`SQLBulkOperation` | バルクの登録を実行する
`SQLMoreResults` | より多くの結果が、SELECT、UPDATE、INSERTあるいはDELETEステートメントが含まれる ステートメントが利用可能かどうかを決め、そうであるならば、 それらの結果のための処理を初期化する
`SQLPrimaryKeys` | テーブルの主キーを構成する列名を返す
`SQLProcedureColumns` | Returns the information about optimal set of columns that uniquely identifies a row in a specified table.
`SQLProcedures` | 特定のデータソースに管理されているプロシージャーのリストを返す
`SQLSetPos` | 行セットでカーソル位置を設定する。 アプリケーションは 行セットの中でカーソル位置をセットし、 アプリケーションが行セットの中のデータをリフレッシュするか あるいは結果セット中のデータを更新するか、削除することを 可能にする

## 4.4 ODBC レベル 2 ODBC API 関数

Empress ODBC クライアントがサポートするODBC レベル 2 ODBC API 関数を 以下に示します。

表 4-3: ODBC レベル 2 ODBC API 関数

関数名 | 説明
`SQLColumnPrivileges` | 特定のテーブルの権限に関連したカラムのリストを返す
`SQLDescribeParam` | 準備されたSQLステートメントに関連したパラメーター・マーカーの詳細を返す
`SQLForeignKeys` | 特定のテーブルの 主キーに関連付けられた他のテーブルの外部キーのリスト および 外部キーのリストを返す
`SQLTablePrivileges` | 各テーブルに関する権限とテーブルリストを返す

## 4.5 同期処理

Empress ODBCドライバは、デフォルトでは ODBC 呼び出しを同期実行します。 同期実行とは呼び出しが完了するまで、ドライバはアプリケーションに制御を 戻さないことを意味します。 この場合において、コネクティビティ(ODBC)サーバーに対し、 時間のかかるタスクを実行させることは、クライアントアプリケーションが 長い時間アイドル状態で待たされることになります。 非同期処理モードは、Empress ODBC ドライバ のODBC 呼び出し アプリケーションにSQL_STILL_EXECUTING 戻り値がすぐに戻ることが できるモードです。

Empress ODBCドライバは非同期実行接続をサポートします。 与えられた接続ハンドルに関連したステートメント ハンドルは すべて非同期モードか、あるいはすべて同時モードとなります。 同じ接続中の他のステートメント ハンドルが同期モードである間は、 接続中のステートメント ハンドルは非同期モードでありえなく、 その逆も正しいことになります。

## 4.6 マルチスレッドでの動作

データベース アプリケーションの並列処理をおこなうために、 Empress ODBC　ドライバ および Empress ODBC ローカル アクセス ドライバ はスレッド中で使用することができます。 その場合、多数の接続の開始、および各スレッドとそれらの接続を関連させることに より、同時にSQLオペレーション(例えば異なるスレッドからの同時にクエリを発行する)を発行したほうがよいことになります。