開発者リファレンス : データ アクセス方法 : ODBC Guide : ODBC 仕様のサポート
 
このページをシェアする                  
ODBC 仕様のサポート
Zen の Open Database Connectivity(ODBC)仕様のサポートの概要
以下のトピックでは、Zen の Open Database Connectivity(ODBC)仕様のサポートについて説明します。
ODBC 仕様のサポート
ODBC API サポート
ODBC 属性サポート
ODBC 記述子フィールドのサポート
Zen で ODBC 構成オプションを設定する方法については、DSN のセットアップおよび接続文字列を参照してください。
ODBC 仕様のサポート
ODBC(Open Database Connectivity)とは、Microsoft によって開発された、データベース マネージメント システム(DBMS)にアクセスするための標準 API です。この標準は、長年にわたって進化し続けてきました。Zen リレーショナル インターフェイスは、コア、レベル 1、およびレベル 2 のインターフェイス サポート レベルに対する ODBC v3.51 仕様をサポートしています(レベル 3 はサポート対象外です)。
ODBC インターフェイス サポートの例外
コア レベル
SQL_BEST_ROWID
リレーショナル インターフェイスでは、テーブル内の行を識別する最適な列セットとして固有のインデックスが使用されます。
IDENTITY 列のあるテーブルに新しい列を挿入した場合、リレーショナル インターフェイスは IDENTITY 列に割り当てられた値を返しません。IDENTITY 列の値は @@IDENTITY 変数を使用することによって判断できます。『SQL Engine Reference』の @@IDENTITY および @@BIGIDENTITY を参照してください。
レベル 2
以下はサポート対象外です。
SQL_ATTR_LOGIN_TIMEOUT
SQL_BEST_ROWID(上記の説明を参照)
SQL_ROWVER
ODBC API サポート
次の表は、リレーショナル インターフェイスによりサポートされる ODBC API 関数、および ODBC サポート レベルの一覧を示します。ODBC API の詳細については、Microsoft の ODBC ドキュメントを参照してください。
表 1 Zen がサポートしている ODBC API 関数
ODBC 関数
ODBC サポート レベル
SQLAllocHandle
コア
SQLBindCol
コア
SQLBindParameter
コア
SQLBrowseConnect
レベル 1
SQLBulkOperations
レベル 1
SQLCancel
コア
SQLCloseCursor
コア
SQLColAttribute
コア
SQLColumnPrivileges
レベル 2
SQLColumns
コア
SQLConnect
コア
SQLCopyDesc
コア
SQLDataSources
コア
SQLDescribeCol
コア
SQLDescribeParam
レベル 2
SQLDisconnect
コア
SQLDriverConnect
コア
SQLDrivers
コア
SQLEndTran
コア
SQLExecDirect
コア
SQLExecute
コア
SQLExtendedFetch
コア
SQLFetch
コア
SQLFetchScroll
コア
SQLForeignKeys
レベル 2
SQLFreeHandle
コア
SQLFreeStmt
コア
SQLGetConnectAttr
コア
SQLGetCursorName
コア
SQLGetData
コア
SQLGetDescField
コア
SQLGetDescRec
コア
SQLGetDiagField
コア
SQLGetDiagRec
コア
SQLGetEnvAttr
コア
SQLGetFunctions
コア
SQLGetInfo
コア
SQLGetStmtAttr
コア
SQLGetTypeInfo
コア
SQLMoreResults
レベル 1
SQLNativeSql
コア
SQLNumParams
コア
SQLNumResultCols
コア
SQLParamData
コア
SQLPrepare
コア
SQLPrimaryKeys
レベル 1
SQLProcedureColumns
レベル 1
SQLProcedures
レベル 1
SQLPutData
コア
SQLRowCount
コア
SQLSetConnectAttr
コア
SQLSetCursorName
コア
SQLSetDescField
コア
SQLSetDescRec
コア
SQLSetEnvAttr
コア
SQLSetPos
レベル 1
SQLSetStmtAttr
コア
SQLStatistics
コア
SQLTablePrivileges
レベル 2
SQLTables
コア
ODBC API サポートの例外
次のセクションには、ODBC API サポートの例外に関する詳細が記述されています。
SQLGetData
アプリケーションで SQLGetData を呼び出して SQL_C_NUMERIC 構造体にデータを返した場合、ODBC 標準では、SQL_DESC_SCALE フィールドはゼロに設定され、SQL_DESC_PRECISION フィールドにはドライバー定義の精度が使用されます。
Zen は、メタデータに定義されている小数位およびドライバー定義の精度(桁数)の値を使用します。次の例を考えて見ましょう。この例では、小数位は 2 に設定されます。
CREATE TABLE testnum (col1 NUMERIC(10,2))
INSERT INTO testnum VALUES (10.34)
SELECT * FROM testnum
SELECT ステートメントは 10.00 ではなく 10.34 を返します。
SQLGetTypeInfo
SQLGetTypeInfo を使用すると、リレーショナル インターフェイスによって指定されたネイティブ データ型名(タイプ名)のリストが生成されます。たとえば、SQL_CHAR は CHARACTER に割り当てられます。CREATE TABLE ステートメントまたは ALTER TABLE ステートメント内の列のデータ型名、あるいはプロシージャのパラメーターや、プロシージャおよびトリガーで宣言された変数のデータ型名には、この関数から戻される名前を使用してください。
サポートされている ODBC データ型の一覧については、使用できるデータ型を参照してください。
SQLGetInfo
リレーショナル インターフェイスは、SQL_DRIVER_VER と SQL_DBMS_VER に対して同一の値を返します。このバージョン値は次の形式で返されます。
aa.bb.cccc ddd
この値は、次の表で説明されているように 4 つの構成要素として解釈できます。
要素
説明
aa
メジャー バージョン
データベース エンジンのメジャー バージョン。
bb
マイナー バージョン
データベース エンジンのマイナー バージョン。一般に、サービス パックで更新されます。
cccc
ビルド番号
リリースを特定するビルドの詳細。
ddd
ポイント ビルド
ビルドのマイナー アップデート。
次の表では、SQLGetInfo で一般的に返されるその他の値についてまとめています。値は例としてのみ挙げてあります。
項目
値の例
SQL_DRIVER_NAME
W3ODBCCI.DLL
SQL_DRIVER_VER
10.00.0147 012
SQL_DRIVER_ODBC_VER
03.51
SQL_DBMS_NAME
Zen
SQL_DBMS_VER
10.00.0147 012
SQL_ODBC_VER
03.52.0000
SQL_ODBC_API_CONFORMANCE
SQL_OAC_LEVEL2
SQL_ODBC_INTERFACE_CONFORMANCE
SQL_OIC_LEVEL2
SQLSpecialColumns
リレーショナル インターフェイスでは、テーブル内の行を一意に識別する最適な列セットとして固有のインデックスが使用されます。新しい行が挿入されたとき、リレーショナル インターフェイスは IDENTITY 列の値を返しません。IDENTITY 列の値は @@IDENTITY 変数を使用することによって判断できます。『SQL Engine Reference』の @@IDENTITY および @@BIGIDENTITY を参照してください。
ODBC 属性サポート
リレーショナル インターフェイスは ODBC v3.51 の属性サポートを提供していますが、次に挙げる例外があります。
接続属性サポート
次の表は、ODBC 接続属性サポートの例外を示します。
表 2 ODBC 接続属性サポートの例外
fOption
解説
SQL_ATTR_AUTO_IPD
デフォルト値は SQL_TRUE です。Pervasive ODBC ドライバーは、この属性値を SQL_FALSE に設定することを許可していません。
SQL_ATTR_CONNECTION_TIMEOUT
デフォルト値は 0 です。それ以外の値はサポートされていません。
SQL_ATTR_METADATA_ID
デフォルト値は SQL_FALSE です。Pervasive ODBC ドライバーは、この属性値を SQL_TRUE に設定することを許可していません。
ステートメント属性のサポート
次の表は、ODBC ステートメント属性サポートの例外を示します。
表 3 ODBC ステートメント属性サポートの例外
fOption(数値)
解説
SQL_ATTR_ENABLE_AUTO_IPD(15)
デフォルト値は SQL_TRUE です。Pervasive ODBC ドライバーは、この属性値を SQL_FALSE に設定することを許可していません。
SQL_ATTR_METADATA_ID(10014)
デフォルト値は SQL_FALSE です。Pervasive ODBC ドライバーは、この属性値を SQL_TRUE に設定することを許可していません。
SQL_ATTR_PARAM_BIND_TYPE(18)
SQL_PARAM_BIND_BY_COLUMN のみサポートされます。
SQL_ATTR_QUERY_TIMEOUT(0)
SQLSetStmtAttr および SQLSetConnectAttr を介してサポートされます。SQLExecDirect、SQLExecute、SQLFetch および SQLExtendedFetch にのみ適用できます。DDL ステートメントに適用してはいけません。
ODBC 記述子フィールドのサポート
Zen リレーショナル エンジンは ODBC v3.51 記述子フィールド サポートを提供していますが、次の例外があります。
表 4 ODBC 記述子サポートの例外
fOption
解説
SQL_DESC_BIND_TYPE
アプリケーション パラメーター記述子(APD)では、SQL_BIND_BY_COLUMN のみサポートされます。
SQL_DESC_ROWVER
記述子フィールドおよびビット数値
一部の記述子フィールドは ODBC のさまざまな SQLSet および SQLGet 関数を介して設定できますが、これらの関数が 64 ビット値対応に変更されている一方、それ以外の関数はまだ 32 ビット値対応であることに注意してください。64 ビット ODBC ドライバーを使用している場合、このようなフィールドを設定および取得する際には、適切なサイズの変数を使用するようにしてください。詳細については、Microsoft の ODBC ドキュメントを参照してください。
説明の要点は、SQL_ROWSET_SIZE は SQLGetStmtOption と SQLGetStmtAttr の両方でサポートされるということです。64 ビット ODBC ドライバーを使用し、SQLGetStmtOption または SQLGetStmtAttr を呼び出した場合、属性パラメーターが SQL_ROWSET_SIZE に設定されている場合には、*ValuePtr に 64 ビット値が返されます。
SQLSetStmtOption の各種オプション
このセクションでは、以下の SQLSetStmtOption の各種オプションに対する Zen のサポートについて説明します。
SQL_BIND_TYPE
SQL_CONCURRENCY
SQL_CURSOR_TYPE
SQL_RETRIEVE_DATA
SQL_ROWSET_SIZE
SQL_USE_BOOKMARKS
次の表は、各オプションで有効な設定値を示します。
 
表 5 アクセス方法ごとにサポートされるバインド、並行、およびカーソルのタイプ
 
ODBC カーソル ライブラリ
現在の Zen ODBC ドライバー
SQL_BIND_TYPE
SQL_BIND_BY_COLUMN または行方向のバインドを示す長さ
SQL_BIND_BY_COLUMN または行方向のバインドを示す長さ
SQL_CONCURRENCY
SQL_CONCUR_READ_ONLY または SQL_CONCUR_ VALUES
(SQL_CONCUR_ROWVER の場合、ライブラリは SQL_CONCUR_VALUES を代用し、SQL_SUCCESS_WITH_INFO を返して、SQLSTATE に 01S02 を設定する)
(SQL_CONCUR_LOCK の場合、ライブラリは SQLSTATE = S1C00 の SQL_ERROR を返す)
SQL_CONCUR_READ_ONLY、SQL_CONCUR_ROWVER または SQL_CONCUR_LOCK
(SQL_CONCUR_VALUES の場合、ドライバーは自動的に SQL_CONCUR_ROWVER を代用する)
SQL_CURSOR_TYPE
SQL_CURSOR_FORWARD_ONLY または SQL_CURSOR_STATIC
(SQL_CURSOR_KEYSET_DRIVEN および SQL_CURSOR_DYNAMIC の場合、ライブラリは SQL_CURSOR_STATIC を代用し、SQL_SUCCESS_WITH_INFO を返して、SQLSTATE に 01S02 を設定する)
SQL_CURSOR_FORWARD_ONLY または SQL_CURSOR_STATIC または SQL_CURSOR_DYNAMIC
(SQL_CURSOR_KEYSET_DRIVEN の場合、ライブラリは SQL_CURSOR_STATIC を代用し、SQL_SUCCESS_WITH_INFO を返して、SQLSTATE に 01S02 を設定する)
 
表 6 アクセス方法ごとにサポートされる行セットのサイズおよびブックマーク
 
ODBC カーソル ライブラリ
現在の Zen ODBC ドライバー
SQL_RETRIEVE_DATA
SQL_RD_ON
(SQL_RD_OFF の場合、ライブラリは SQLSTATE = S1C00 の SQL_ERROR を返す)
SQL_RD_ON または SQL_RD_OFF
SQL_ROWSET_SIZE
行セットの行数を示す値。これは最大行セット サイズを限度とします。
行セットの行数を示す値。これは最大行セット サイズを限度とします。
SQL_USE_BOOKMARKS
SQL_UB_ON または SQL_UB_OFF
SQL_UB_ON または SQL_UB_OFF