レコードセット : 大量のデータの処理 (ODBC)

更新 : 2007 年 11 月

このトピックの内容は、MFC ODBC クラスと MFC DAO クラスの両方に該当します。

s55kt8s3.alert_note(ja-jp,VS.90).gifメモ :

MFC DAO クラスを使用する場合、大量のデータ項目を管理するには、CLongBinary クラスではなく CByteArray クラスを使用します。バルク行フェッチを実装した MFC ODBC クラスを使う場合は、CByteArray を使わずに CLongBinary を使います。バルク行フェッチの詳細については、「レコードセット : バルク行フェッチ (ODBC)」を参照してください。

データベースには、ビットマップ (顔写真や地図、製品写真、OLE オブジェクトなど) などの大きなデータを格納することがあります。このようなデータは、以下の特徴があるため、バイナリ ラージ オブジェクト (BLOB: Binary Large Object) と呼ばれます。

  • フィールド値が大きい。

  • 数値データなどの単純なデータ型とは異なり、あらかじめサイズを決定できない。

  • プログラム上、定型処理を行いにくい。

このトピックでは、バイナリ ラージ オブジェクトを扱うデータベース クラスを作成する方法について説明します。

大型オブジェクトの管理

レコードセットには、バイナリ ラージ オブジェクトの管理作業を軽減する方法が 2 つあります。CByteArray クラスを使う方法と、CLongBinary クラスを使う方法です。通常、バイナリ ラージ オブジェクトを管理するには CByteArray の方を優先して使います。

CByteArray は、CLongBinary と比べてオーバーヘッドの面で劣りますが、機能的に優れています (「CByteArray クラス」を参照)。CLongBinary については、「CLongBinary クラス」で簡単に説明します。

CByteArray を使って大量のデータを処理する方法の詳細については、「テクニカル ノート 45: MFC/データベースの Long Varchar/Varbinary 型のサポート」を参照してください。

CByteArray クラス

CByteArray は、MFC コレクション クラスの 1 つです。CByteArray オブジェクトは、バイトの動的な配列 (必要に応じて拡張できる配列) を格納します。このクラスは、組み込み C++ 配列と同様に、インデックスによる高速なアクセスを提供します。CByteArray オブジェクトは、シリアル化することも、診断用にダンプすることもできます。このクラスの提供するメンバ関数では、指定されたバイトの取得と設定、バイトの挿入と付加、バイトの個別/一括除去を行うことができます。これらの機能によって、バイナリ データを簡単に解析できます。たとえば、バイナリ オブジェクトが OLE オブジェクトの場合は、ヘッダー バイトを通じて実際のオブジェクトに到達できます。

レコードセットでの CByteArray の使用

レコードセットに CByteArray型のフィールド データ メンバを用意すると、RFX によってレコードセットとデータ ソースとの間でオブジェクトをやり取りするための固定ベースを提供できます。プログラムは、この固定ベースを通じてオブジェクト内のデータも操作できます。RFX は取得したデータを保存するための専用のサイトを必要とし、プログラムはオブジェクトのデータにアクセスするための方法を必要とします。

CByteArray を使って大量のデータを処理する方法の詳細については、「テクニカル ノート 45: MFC/データベースの Long Varchar/Varbinary 型のサポート」を参照してください。

CLongBinary クラス

CLongBinary オブジェクトは、ヒープ上に確保された領域を指す HGLOBAL ハンドルを中心に構成されています。バイナリ ラージ オブジェクトを格納したテーブル列が CLongBinary オブジェクトに結び付けられると、RFX は、レコードセットにデータを転送するために HGLOBAL ハンドルにメモリを割り当てて、ハンドルをレコードセットの CLongBinary フィールドに保存します。

これにより、プログラムでは HGLOBAL ハンドル m_hData を通じてデータを操作できます。この点において、CByteArray は CLongBinary より機能的に優れています。

s55kt8s3.alert_caution(ja-jp,VS.90).gif注意 :

CLongBinary オブジェクトは、関数呼び出しのパラメータとして使用できません。また、このオブジェクトの中では ::SQLGetData が使われているため、スナップショットのスクロール速度が低下します。動的なスキーマ列にアクセスするために直接 ::SQLGetData を呼び出した場合も、スクロール速度が低下します。

参照

概念

レコードセット (ODBC)

レコードセット : 集計値の計算 (ODBC)

レコード フィールド エクスチェンジ (RFX)