動作の変更

動作の変更とは、インターフェイスの構文が変わらないものの、セマンティクスが変更された変更です。 これらの変更により、ODBC 2.x で使用される機能は、ODBC 3.x の同じ機能とは異なる動作をします。

アプリケーションが ODBC 2.x の動作を示すか、ODBC 3.x の動作を示すかは、SQL_ATTR_ODBC_VERSION 環境属性によって決まります。 この 32 ビット値は、ODBC 2.x の動作を示すには SQL_OV_ODBC2 に設定され、ODBC 3.x の動作を示すには SQL_OV_ODBC3 に設定されます。

SQL_ATTR_ODBC_VERSION 環境属性は、SQLSetEnvAttr の呼び出しによって設定されます。 アプリケーションが SQLAllocHandle を呼び出して環境ハンドルを割り当てた後、SQLSetEnvAttr をすぐに呼び出して、表示される動作を設定する必要があります。 (その結果、割り当てられているがバージョンレスの状態で環境ハンドルを記述するための新しい環境状態が発生します)。詳細については、「付録 B: ODBC 状態遷移テーブル」を参照してください。

アプリケーションは SQL_ATTR_ODBC_VERSION 環境属性でどのような動作を示すかを示しますが、この属性はアプリケーションと ODBC 2.x または ODBC 3.x ドライバーとの接続には影響しません。 ODBC 3.x アプリケーションは、環境属性の設定に関係なく、ODBC 2.x または 3.x ドライバーに接続できます。

ODBC 3.x アプリケーションは SQLAllocEnv を決して呼び出さないでください。 その結果、ドライバー マネージャーが SQLAllocEnv への呼び出しを受け取ると、アプリケーションは ODBC 2.x アプリケーションとして認識されます。

SQL_ATTR_ODBC_VERSION 属性は、ODBC 3.x ドライバーの動作の 3 つの異なる側面に影響します。

  • SQLSTATE

  • 日付、時刻、タイムスタンプのデータ型

  • SQLTablesCatalogName 引数は、ODBC 3.x の検索パターンを受け入れますが、ODBC 2.x では受け入れません。

SQL_ATTR_ODBC_VERSION 環境属性の設定は、SQLSetParam または SQLBindParam には影響しません。 SQLColAttribute もこのビットの影響を受けません。 SQLColAttribute は ODBC のバージョン (日付型、有効桁数、小数点以下の桁数、長さ) の影響を受ける属性を返しますが、想定される動作は FieldIdentifier 引数の値によって決まります。 FieldIdentifier が SQL_DESC_TYPE と等しい場合、SQLColAttribute は日付、時刻、およびタイムスタンプの ODBC 3.x コードを返します。FieldIdentifier が SQL_COLUMN_TYPE と等しい場合、SQLColAttribute は日付、時刻、およびタイムスタンプの ODBC 2.x コードを返します。

このセクションでは、次のトピックを扱います。