次の表では、このセクションで前に定義したアプリケーションとドライバーの種類の互換性について説明します。
| アプリケーションの種類 およびバージョン |
32 ビット ODBC 2.x ドライバー |
ODBC 3.x driver |
ODBC 3.8 ドライバー | ISO および Open Group 準拠ドライバー |
|---|---|---|---|---|
| 16 ビット アプリケーション、任意のバージョン | コンパチ | コンパチ | コンパチ | コンパチ |
| 純粋な 2.x アプリケーション | コンパチ | コンパチ | コンパチ | 互換性がありません[3] |
| Pure 2.x の再コンパイル済みアプリケーション | コンパチ | 互換性[1] | 互換性がある[1] | 互換性がありません[3] |
| Pure 2.x Unicode アプリケーション | コンパチ | 互換性[1] | 互換性あり[1] | 互換性がありません[3] |
| Pure Open Group および ISO 準拠アプリケーション | 互換性なし | 互換性あり[2] | 互換性[2] | 互換性[2] |
| Pure 3.0 アプリケーション | 互換性なし | コンパチ | コンパチ | 互換性がありません[4] |
| Pure 3.5 アプリケーション | 互換性なし | コンパチ | コンパチ | 互換性がありません[4] |
| Pure 3.8 (以降) アプリケーション | 互換性がありません [5] | 互換性がありません [5] | コンパチ | 互換性がありません [4] |
| 置き換えられたアプリケーション | コンパチ | コンパチ | コンパチ | 互換性がありません[3] |
[1] アプリケーションは、UNICODE オプション (Unicode アプリケーションの場合) で ODBC 3.5 (またはそれ以降) ヘッダーを使用して再コンパイルする必要があり、ODBCVER を0x0250に設定する必要があります。
[2] アプリケーションは ODBC 3.5 (またはそれ以降) ヘッダーを使用してコンパイルし、ODBC ドライバー マネージャーとリンクする必要があります。 また、ヘッダー フラグのODBC_STDも設定する必要があります。
[3] ODBC 2.x には、ブックマークなどの標準に含まれていない機能があるため、この構成が機能しない可能性があります。
[4] ODBC 3.x には、ブックマークなどの標準に含まれていない機能があるため、この構成が機能しない可能性があります。
[5] ODBC 3.8 には ODBC 2.x ドライバーや 3.x ドライバーにない機能 (ODBC のドライバー固有 の C データ型など) があるため、この構成が失敗する可能性があります。
ドライバー マネージャーの互換性
すべてのドライバー マネージャー バージョンで動作する必要がある ODBC 3.0 アプリケーションは、起動時に次の操作を行う必要があります。
環境ハンドルを割り当てます。
SQL_ATTR_ODBC_VERSION環境属性を SQL_OV_ODBC3_80 に設定します。 ドライバー マネージャーがSQL_ERRORを返す場合、ドライバー マネージャーは 3.8 より古いです。 必要に応じて、ドライバー マネージャーに対応するように、SQL_ATTR_ODBC_VERSIONをSQL_OV_ODBC3またはSQL_OV_ODBC2にリセットします。
接続ハンドルを割り当てます。
接続を作成します。
SQL_DRIVER_ODBC_VERの SQLGetInfo を呼び出して、ドライバーのバージョンを確認します。 ドライバーが ODBC 3.8 ドライバーの場合は、ドライバー固有の C 型を使用できます。 それ以外の場合は、ドライバー固有の C データ型を使用しないでください。
再コンパイルされた ODBC 3.x アプリケーションでは、SQL_ATTR_ODBC_VERSIONのSQL_OV_ODBC3_80を指定せずに、ドライバー固有の C 型以外の ODBC 3.8 機能を使用できることに注意してください。 これは、ODBC 3.x 機能を使用して再コンパイルされた ODBC 2.x アプリケーションに似ています。
すべてのドライバー マネージャーと互換性のあるアプリケーションでの SQLCancelHandle の使用
SQLCancelHandle 関数は、Windows 7 より前にリリースされたドライバー マネージャーではサポートされていないため、SQLCancelHandle を直接呼び出す場合、アプリケーションを古いバージョンの Windows に読み込むことはできません。 すべてのバージョンのドライバー マネージャーを操作し、新しいバージョンの Windows で SQLCancelHandle を使用するには、アプリケーションは LoadLibrary と GetProcAddress を使用して SQLCancelHandle を間接的に呼び出す必要があります。