レコードセット: 大量のデータの処理 (ODBC)
このトピックの内容は、MFC ODBC クラスと MFC DAO クラスの両方に該当します。
Note
MFC DAO クラスを使用している場合は、CLongBinary クラスではなく CByteArray クラスを使用して大量のデータ項目を管理します。 一括行フェッチで MFC ODBC クラスを使用している場合は、CByteArray
ではなく CLongBinary
を使用します。 バルク行フェッチの詳細については、「レコードセット: バルク行フェッチ (ODBC)」を参照してください。
たとえば、ビットマップ (従業員の写真、地図、製品の画像、OLE オブジェクトなど) などの大きなデータをデータベースに格納できるとします。 多くの場合、この種のデータは、次の理由でバイナリ ラージ オブジェクト (または BLOB) と呼ばれます。
各フィールド値が大きい。
数値や他の単純なデータ型とは異なり、予測可能なサイズがない。
プログラムの観点ではデータの形がない。
このトピックでは、このようなオブジェクトを操作するためにデータベース クラスが提供するサポートについて説明します。
ラージ オブジェクトの管理
レコードセットには、バイナリ ラージ オブジェクトを管理する際の特殊な問題を解決する方法が 2 つあります。 CByteArray クラスまたは CLongBinary クラスを使用できます。 一般に、CByteArray
は大きなバイナリ データを管理するために推奨される方法です。
「CByteArray クラス」に示すとおり、CByteArray
には CLongBinary
よりも多くのオーバーヘッドが必要ですが、より高機能です。 CLongBinary
については、「CLongBinary クラス」で簡単に説明します。
CByteArray
を使用して大量のデータ項目を操作する方法の詳細については、テクニカル ノート 45 を参照してください。
CByteArray クラス
CByteArray
は MFC コレクション クラスの 1 つです。 CByteArray
オブジェクトは、バイトの動的配列を格納します。この配列は必要に応じて拡張できます。 このクラスは、組み込みの C++ 配列と同様に、インデックスによる高速アクセスを提供します。 CByteArray
オブジェクトは、診断の目的でシリアル化およびダンプできます。 このクラスは、指定したバイトの取得と設定、バイトの挿入と追加、および 1 バイトまたはすべてのバイトの削除を行うメンバー関数を提供します。 これらの機能を使用すると、バイナリ データを簡単に解析できるようになります。 たとえば、バイナリ オブジェクトが OLE オブジェクトの場合、実際のオブジェクトに到達するには、いくつかのヘッダー バイトを処理しなければならない可能性があります。
レコードセットでの CByteArray の使用
レコードセットのフィールド データ メンバーに CByteArray
型を指定することで、RFX がレコードセットとデータ ソースの間でこのようなオブジェクトの転送を管理できる固定ベースを提供します。また、このベースを使用して、オブジェクト内のデータを操作できます。 RFX では取得されたデータ用の特定のサイトが必要です。また、ユーザーが基になるデータにアクセスする方法が必要です。
CByteArray
を使用して大量のデータ項目を操作する方法の詳細については、テクニカル ノート 45 を参照してください。
CLongBinary クラス
CLongBinary オブジェクトは、ヒープで割り当てられたストレージのブロックへの HGLOBAL
ハンドルを中心とした単純なシェルです。 バイナリ ラージ オブジェクトを含むテーブル列をバインドする際、RFX は、データをレコードセットに転送する必要があるときに HGLOBAL
ハンドルを割り当て、レコードセットの CLongBinary
フィールドにハンドルを格納します。
次に、HGLOBAL
ハンドルである m_hData
を使用してデータ自体を処理し、ハンドル データの場合と同様に操作します。 ここで、CByteArray によって機能が追加されます。
注意事項
CLongBinary オブジェクトを関数呼び出しでパラメーターとして使用することはできません。 さらに、このオブジェクトの実装で ::SQLGetData
を呼び出す場合は、スクロール可能なスナップショットのスクロール パフォーマンスが必然的に低下します。 これは、自分で ::SQLGetData
の呼び出しを使用して動的スキーマ列を取得する場合にも当てはまる場合があります。
関連項目
レコードセット (ODBC)
レコードセット: 集計値の計算 (ODBC)
レコード フィールド エクスチェンジ (RFX)