動作変更および ODBC 3.x ドライバー
環境属性SQL_ATTR_ODBC_VERSIONは、ODBC 2.x 動作と ODBC 3.x 動作のどちらを実行する必要があるかをドライバーに示します。 SQL_ATTR_ODBC_VERSION環境属性の設定方法は、アプリケーションによって異なります。 ODBC 3.x アプリケーションでは、SQLAllocHandle を呼び出して環境ハンドルを割り当てた後、および SQLAllocHandle を呼び出して接続ハンドルを割り当てる前に、SQLSetEnvAttr を呼び出してこの属性を設定する必要があります。 これが失敗した場合、ドライバー マネージャーは SQLAllocHandle の後者の呼び出しで SQLSTATE HY010 (関数シーケンス エラー) を返します。
Note
動作の変更とアプリケーションの動作の詳細については、「動作の 変更」を参照してください。
ODBC 3.x ヘッダー ファイルで再コンパイルされた ODBC 2.x アプリケーションと ODBC 2.x アプリケーションでは 、SQLSetEnvAttr は呼び出されません。 ただし、SQLAllocHandle の代わりに SQLAllocEnv を呼び出して、環境ハンドルを割り当てます。 そのため、アプリケーションがドライバー マネージャーで SQLAllocEnv を呼び出すと、ドライバー マネージャーはドライバーで SQLAllocHandle と SQLSetEnvAttr を呼び出します。 したがって、ODBC 3.x ドライバーは、設定されているこの属性を常にカウントできます。
ODBC_STD コンパイル フラグを使用してコンパイルされた標準準拠アプリケーションが SQLAllocEnv を呼び出す場合 (これは、 SQLAllocEnv が ISO で非推奨とされていないために発生する可能性があります)、呼び出しはコンパイル時に SQLAllocHandleStd にマップされます。 実行時に、アプリケーションは SQLAllocHandleStd を呼び出します。 ドライバー マネージャーは、SQL_ATTR_ODBC_VERSION環境属性をSQL_OV_ODBC3に設定します。 SQLAllocHandleStd の呼び出しは、HandleType が SQL_HANDLE_ENV の SQLAllocHandle の呼び出しと、SQL_ATTR_ODBC_VERSIONを SQL_OV_ODBC3 に設定する SQLSetEnvAttr の呼び出しと同じです。
特定のドライバー アーキテクチャでは、接続に応じて、ドライバーを ODBC 2.x ドライバーまたは ODBC 3.x ドライバーとして表示する必要があります。 この場合、ドライバーは実際にはドライバーではなく、ドライバー マネージャーと別のドライバーの間に存在するレイヤーである可能性があります。 たとえば、ODBC Spy などのドライバーを模倣する場合があります。 別の例では、EDA/SQL などのゲートウェイとして機能する場合があります。 ODBC 3.x ドライバーとして表示するには、このようなドライバーが SQLAllocHandle をエクスポートでき、ODBC 2.x ドライバーとして表示されるようにするには、 SQLAllocConnect、 SQLAllocEnv、および SQLAllocStmt をエクスポートできる必要があります。 環境、接続、またはステートメントを割り当てると、ドライバー マネージャーは、このドライバーが SQLAllocHandle をエクスポートするかどうかを確認します。 ドライバーは実行されるため、ドライバー マネージャーはドライバーで SQLAllocHandle を呼び出します。 ドライバーが ODBC 2.x ドライバーで動作している場合、ドライバーは、必要に応じて SQLAllocHandle への呼び出しを SQLAllocConnect、 SQLAllocEnv、または SQLAllocStmt にマップする必要があります。 また、ODBC 2.x ドライバーとして動作する場合、SQLSetEnvAttr 呼び出しでは何も行う必要はありません。
このセクションでは、次のトピックを扱います。