SQLSetStmtOption のマッピング
アプリケーションが ODBC 3.x ドライバーを介して SQLSetStmtOption を呼び出すと、
SQLSetStmtOption(StatementHandle, fOption, vParam)
結果は次のようになります。
fOption が文字列である ODBC で定義されたステートメント属性を示す場合、ドライバー マネージャーは を呼び出します。
SQLSetStmtAttr(StatementHandle, fOption, ValuePtr, SQL_NTS)
fOption が 32 ビット整数値を返す ODBC 定義のステートメント属性を示す場合、Driver Manager は を呼び出します。
SQLSetStmtAttr(StatementHandle, fOption, ValuePtr, 0)
fOption がドライバー定義のステートメント属性を示す場合、ドライバー マネージャーは を呼び出します
SQLSetStmtAttr(StatementHandle, fOption, ValuePtr, BufferLength)
上記の 3 つのケースでは、 引数 StatementHandle を hstmt の値に設定し、 Attribute 引数を fOption の値に設定し、 ValuePtr 引数を vParam として値に設定します。
ドライバー マネージャーは、ドライバー定義ステートメント属性に文字列または 32 ビットの整数値が必要かどうかを認識しないため、SQLSetStmtAttr の StringLength 引数に有効な値を渡す必要があります。 ドライバーがドライバー定義ステートメント属性の特別なセマンティクスを定義していて、 SQLSetStmtOption を使用して呼び出す必要がある場合は、 SQLSetStmtOption をサポートする必要があります。
アプリケーションが SQLSetStmtOption を呼び出して ODBC 3.x ドライバーでドライバー固有のステートメント オプションを設定し、そのオプションが ODBC 2.x バージョンのドライバーで定義されている場合は、ODBC 3.x ドライバーの オプションに新しいマニフェスト定数を定義する必要があります。 SQLSetStmtOption の呼び出しで古いマニフェスト定数が使用されている場合、ドライバー マネージャーは StringLength 引数を 0 に設定して SQLSetStmtAttr を呼び出します。
アプリケーションが SQLSetStmtAttr を呼び出して ODBC 3.x ドライバーのSQL_UB_ONにSQL_ATTR_USE_BOOKMARKSを設定すると、SQL_ATTR_USE_BOOKMARKS ステートメント属性は SQL_UB_FIXED に設定されます。 SQL_UB_ONは、SQL_UB_FIXEDと同じ定数です。 ドライバー マネージャーは、SQL_UB_FIXEDをドライバーに渡します。 odbc 3.x ではSQL_UB_FIXEDは非推奨になりましたが、ODBC 3.x ドライバーでは、固定長ブックマークを使用する ODBC 2.x アプリケーションで動作するように実装する必要があります。
ODBC 3.x ドライバーの場合、ドライバー マネージャーは 、Option がSQL_STMT_OPT_MINとSQL_STMT_OPT_MAXの間にあるか、またはSQL_CONNECT_OPT_DRVR_STARTより大きいかどうかを確認しなくなりました。