ODBC: ODBC カーソル ライブラリ
このトピックでは、ODBC カーソルライブラリについて説明し、その使用方法について説明します。 詳細については、次を参照してください。
ODBC カーソルライブラリは、ODBC ドライバーマネージャーとドライバーの間に存在するダイナミックリンクライブラリ (DLL) です。 ODBC の用語では、ドライバーは、レコードセット内のその位置を追跡するためのカーソルを保持します。 カーソルは、現在のレコードが既にスクロールされているレコードセット内の位置をマークし — ます。
カーソルライブラリとレベル 1 ODBC ドライバー
ODBC カーソルライブラリでは、次の新しい機能によってレベル1のドライバーが提供されます。
前方および後方スクロール。 レベル2のドライバーは、既にスクロール可能であるため、カーソルライブラリを必要としません。
スナップショットのサポート。 カーソルライブラリは、スナップショットのレコードを格納しているバッファーを管理します。 このバッファーには、プログラムのレコードの削除と編集が反映されますが、他のユーザーの追加、削除、編集は反映されません。 そのため、スナップショットはカーソルライブラリのバッファーとしての現在のものにすぎません。 また、を呼び出すまで、バッファーには独自の追加が反映されません
Requery。 ダイナセットは、カーソルライブラリを使用しません。
カーソルライブラリは、ドライバーで通常サポートされていない場合でも、スナップショット (静的カーソル) を提供します。 ドライバーで既に静的カーソルがサポートされている場合は、スナップショットのサポートを取得するためにカーソルライブラリを読み込む必要はありません。 カーソルライブラリを使用する場合は、スナップショットと順方向専用のレコードセットのみを使用できます。 ドライバーがダイナセット (KEYSET_DRIVEN カーソル) をサポートしていて、それらを使用する場合は、カーソルライブラリを使用しないようにする必要があります。 スナップショットとダイナセットの両方を使用する場合は、ドライバーで両方がサポートさ CDatabase れていない限り、2つの異なるオブジェクト (2 つの異なる接続) に基づいて作成する必要があります。
位置指定更新とタイムスタンプ列
Note
ODBC データ ソースには、ここで説明するように、MFC ODBC クラス経由でアクセスできます。また、MFC DAO (Data Access Object) クラス経由でもアクセスできます。
Note
ODBC ドライバーでがサポートされている場合、MFC が使用 SQLSetPos 可能な場合は、このトピックは適用されません。
ほとんどのレベル1のドライバーは、位置指定更新をサポートしていません。 このようなドライバーは、この点でレベル2のドライバーの機能をエミュレートするために、カーソルライブラリに依存しています。 カーソルライブラリは、変更されていないフィールドに対して検索された更新を実行することで、位置指定更新のサポートをエミュレートします。
場合によっては、レコードセットに、変化しないフィールドの1つとして timestamp 列が含まれていることがあります。 Timestamp 列を含むテーブルで MFC レコードセットを使用すると、2つの問題が発生します。
最初の問題は、timestamp 列を含むテーブルの更新可能なスナップショットに関する問題です。 スナップショットがバインドされているテーブルに timestamp 列が含まれている場合は、およびを呼び出した後にを呼び出す必要があり RequeryEditUpdate ます。 それ以外の場合は、同じレコードを再び編集することはできません。 およびを呼び出すと EditUpdate 、レコードがデータソースに書き込まれ、タイムスタンプ列が更新されます。 を呼び出さない場合 Requery 、スナップショット内のレコードのタイムスタンプ値は、データソースの対応するタイムスタンプと一致しなくなります。 レコードを再度更新しようとすると、データソースが一致しないために更新を許可しないことがあります。
2番目の問題は、関数と共に使用してテーブルとの間で時刻と日付の情報を転送するときに、 CTime クラスの制限事項を考慮して います。 オブジェクトを処理すると、 CTime データ転送中に余分な中間処理の形式でオーバーヘッドが発生します。 オブジェクトの日付範囲が、 CTime 一部のアプリケーションに対して制限されている場合もあります。 関数の新しいバージョンは、オブジェクトでは RFX_Date なく、ODBC RFX_Date パラメーターを受け取り CTime ます。 詳細については、「 RFX_DateMFC リファレンス」の「RFX_Date」の「」を参照してください。
カーソルライブラリの使用
——またはcdatabase:: Openを呼び出してデータソースに接続するときに、 データソースのカーソルライブラリを使用するかどうかを指定できます。 そのデータソースでスナップショットを作成する場合は、 CDatabase::useCursorLib パラメーターでオプションをに指定する dwOptions か、 OpenExCDatabase::useCursorLib パラメーターに true を指定し Open ます (既定値は true です)。 ODBC ドライバーでダイナセットがサポートされており、データソースでダイナセットを開く場合は、カーソルライブラリを使用しないでください (ダイナセットに必要なドライバー機能の一部をマスクします)。 その場合は、でを指定したり、の CDatabase::useCursorLibOpenExCDatabase::useCursorLib パラメーターに FALSE を指定したりしないで Open ください。