次の方法で共有


CDynamicAccessor クラス

データベース スキーマ (データベースの基になる構造) に詳しくない場合でもデータ ソースにアクセスできます。

構文

class CDynamicAccessor : public CAccessorBase

必要条件

ヘッダー: atldbcli.h

メンバー

メソッド

Name 説明
AddBindEntry 既定のアクセサーをオーバーライドするときに、出力列にバインド項目を追加します。
CDynamicAccessor CDynamicAccessor オブジェクトをインスタンス化して初期化します。
クローズ すべての列のバインドを解除し、割り当てられたメモリを解放し、クラス内の IAccessor インターフェイス ポインターを解放します。
GetBlobHandling 現在の行の BLOB 処理値を取得します。
GetBlobSizeLimit 最大 BLOB サイズをバイト単位で取得します。
GetBookmark 現在の行のブックマークを取得します。
GetColumnCount 行セット内の列数を取得します。
GetColumnFlags 列の特性を取得します。
GetColumnInfo 列メタデータを取得します。
GetColumnName 指定した列の名前を取得します。
GetColumnType 指定した列のデータ型を取得します。
GetLength 列の最大長をバイト単位で取得します。
GetOrdinal 列の名前を指定して、列インデックスを取得します。
GetStatus 指定した列の状態を取得します。
GetValue バッファーからデータを取得します。
SetBlobHandling 現在の行の BLOB 処理値を設定します。
SetBlobSizeLimit 最大 BLOB サイズをバイト単位で設定します。
SetLength 列の長さをバイト単位で設定します。
SetStatus 指定した列の状態を設定します。
SetValue データをバッファーに格納します。

解説

CDynamicAccessor メソッドを使って、列名、列数、データ型などの列情報を取得します。 この列情報は、実行時にアクセサーを動的に作成するために使います。

列情報は、このクラスによって作成および管理されるバッファーに格納されます。 GetValue を使って、バッファーからデータを取得します。

動的アクセサー クラスを使う方法の説明と例については、「動的アクセサーの使用」を参照してください。

CDynamicAccessor::AddBindEntry

出力列にバインド エントリを追加します。

構文

HRESULT AddBindEntry(const DBCOLUMNINFO& info) throw();

パラメーター

info
[入力] 列情報を含む DBCOLUMNINFO 構造体。 「OLE DB プログラマーズ リファレンス」の「IColumnsInfo::GetColumnInfo」の「DBCOLUMNINFO 構造体」を参照してください。

戻り値

標準 HRESULT 値のいずれか。

解説

このメソッドは、CDynamicAccessor で作成された既定のアクセサーをオーバーライドするときに使います (データのフェッチ方法に関するページを参照してください)。

CDynamicAccessor::CDynamicAccessor

CDynamicAccessor オブジェクトをインスタンス化して初期化します。

構文

CDynamicAccessor(DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
   DBLENGTH nBlobSize = 8000);

パラメーター

eBlobHandling
バイナリ ラージ オブジェクト (BLOB) データの処理方法を指定します。 既定値は DBBLOBHANDLING_DEFAULT です。 DBBLOBHANDLINGENUM 値の説明については、「SetBlobHandling」を参照してください。

nBlobSize
最大 BLOB サイズ (バイト単位)。この値に対する列データは BLOB として扱われます。 既定値は 8,000 です。 詳細については、「SetBlobSizeLimit」を参照してください。

解説

コンストラクターを使って CDynamicAccessor オブジェクトを初期化する場合、BLOB をバインドする方法を指定できます。 BLOB には、グラフィック、サウンド、コンパイルされたコードなどのバイナリ データを含めることができます。 既定の動作では、8,000 バイトを超える列を BLOB として扱い、ISequentialStream オブジェクトへのバインドを試みます。 ただし、BLOB サイズに別の値を指定することもできます。

また、CDynamicAccessor が BLOB データとして適格な列データを処理する方法も指定できます。既定の方法で BLOB データを処理する、BLOB データをスキップする (バインドしない)、またはプロバイダーから割り当てられたメモリ内で BLOB データをバインドすることができます。

CDynamicAccessor::Close

すべての列のバインドを解除し、割り当てられたメモリを解放し、クラス内の IAccessor インターフェイス ポインターを解放します。

構文

void Close() throw();

CDynamicAccessor::GetBlobHandling

現在の行の BLOB 処理値を取得します。

構文

const DBBLOBHANDLINGENUM GetBlobHandling() const;

解説

SetBlobHandling によって設定された BLOB 処理値 eBlobHandling を返します。

CDynamicAccessor::GetBlobSizeLimit

最大 BLOB サイズをバイト単位で取得します。

構文

const DBLENGTH GetBlobSizeLimit() const;

解説

SetBlobSizeLimit によって設定された BLOB 処理値 nBlobSize を返します。

CDynamicAccessor::GetBookmark

現在の行のブックマークを取得します。

構文

HRESULT GetBookmark(CBookmark< >* pBookmark) const throw();

パラメーター

pBookmark
[出力] CBookmark オブジェクトへのポインター。

戻り値

標準 HRESULT 値のいずれか。

解説

ブックマークを取得するには、DBPROP_IRowsetLocate を VARIANT_TRUE に設定する必要があります。

CDynamicAccessor::GetColumnCount

列数を取得します。

構文

DBORDINAL GetColumnCount() const throw();

戻り値

取得された列数。

CDynamicAccessor::GetColumnFlags

列の特性を取得します。

構文

bool GetColumnFlags(DBORDINAL nColumn,
   DBCOLUMNFLAGS* pFlags) const throw();

パラメーター

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

pFlags
[出力] 列の特性を記述するビットマスクへのポインター。 「OLE DB プログラマーズ リファレンス」の「IColumnsInfo::GetColumnInfo」の「DBCOLUMNFLAGS 列挙型」を参照してください。

戻り値

列の特性の取得に成功した場合は true を返します。 それ以外の場合は falseを返します。

解説

列番号は 1 からのオフセットです。 列 0 は特殊なケースです。使用できる場合はブックマークです。

CDynamicAccessor::GetColumnInfo

ほとんどのコンシューマーが必要とする列メタデータを返します。

構文

HRESULT GetColumnInfo(IRowset* pRowset,
   DBORDINAL* pColumns,
   DBCOLUMNINFO** ppColumnInfo,
   OLECHAR** ppStringsBuffer) throw();

パラメーター

pRowset
[入力] IRowset インターフェイスへのポインター。

pColumns
[出力] 行セット内の列数を返すメモリへのポインター。この数値には、ブックマーク列がある場合はそれが含まれます。

ppColumnInfo
[出力] DBCOLUMNINFO 構造体の配列を返すメモリへのポインター。 「OLE DB プログラマーズ リファレンス」の「IColumnsInfo::GetColumnInfo」の「DBCOLUMNINFO 構造体」を参照してください。

ppStringsBuffer
[出力] 1 つの割り当てブロック内のすべての文字列値 (columnid 内または pwszName に使われる名前) に対するストレージへのポインターを返すメモリへのポインター。

戻り値

標準 HRESULT 値のいずれか。

解説

データ型 DBORDINALDBCOLUMNINFOOLECHAR の情報については、「OLE DB プログラマーズ リファレンス」の「IColumnsInfo::GetColumnInfo」を参照してください。

CDynamicAccessor::GetColumnName

指定した列の名前を取得します。

構文

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

パラメーター

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

戻り値

指定された列の名前。

CDynamicAccessor::GetColumnType

指定した列のデータ型を取得します。

構文

bool GetColumnType(DBORDINAL nColumn,
   DBTYPE* pType) const throw();

パラメーター

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

pType
[出力] 指定した列のデータ型へのポインター。

戻り値

成功した場合は true を返し、失敗した場合は false を返します。

CDynamicAccessor::GetLength

指定した列の長さを取得します。

構文

bool GetLength(DBORDINAL nColumn,
   DBLENGTH* pLength) const throw();

bool GetLength(const CHAR* pColumnName,
   DBLENGTH* pLength) const throw();

bool GetLength(const WCHAR* pColumnName,
   DBLENGTH* pLength) const throw();

パラメーター

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

pColumnName
[入力] 列名を含む文字列へのポインター。

pLength
[出力] バイト単位の列の長さを含む整数へのポインター。

戻り値

指定した列が見つかった場合は true を返します。 それ以外の場合、この関数は false を返します。

解説

1 つ目のオーバーライドは列番号を受け取り、2 つ目と 3 つ目のオーバーライドはそれぞれ ANSI または Unicode 形式の列名を受け取ります。

CDynamicAccessor::GetOrdinal

列の名前を指定して、列番号を取得します。

構文

bool GetOrdinal(const CHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

bool GetOrdinal(const WCHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

パラメーター

pColumnName
[入力] 列名を含む文字列へのポインター。

pOrdinal
[出力] 列番号へのポインター。

戻り値

指定した名前の列が見つかった場合は true を返します。 それ以外の場合、この関数は false を返します。

CDynamicAccessor::GetStatus

指定した列の状態を取得します。

構文

bool GetStatus(DBORDINAL nColumn,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const CHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const WCHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

パラメーター

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

pColumnName
[入力] 列名を含む文字列へのポインター。

pStatus
[出力] 列の状態を格納する変数へのポインター。 詳細については、「OLE DB プログラマーズ リファレンス」の「DBSTATUS」を参照してください。

戻り値

指定した列が見つかった場合は true を返します。 それ以外の場合、この関数は false を返します。

CDynamicAccessor::GetValue

指定した列のデータを取得します。

構文

void* GetValue(DBORDINAL nColumn) const throw();

void* GetValue(const CHAR* pColumnName) const throw();

void* GetValue(const WCHAR* pColumnName) const throw();

template < class ctype >
bool GetValue(DBORDINAL nColumn, ctype* pData) const throw();

template < class ctype >
bool GetValue(const CHAR* pColumnName, ctype* pData) const throw();

template < class ctype >
bool GetValue(const WCHAR* pColumnName, ctype* pData) const throw();

パラメーター

ctype
[入力] 特別な処理が必要な、文字列型 (CHAR*WCHAR*) 以外のすべてのデータ型を処理するテンプレート化されたパラメーター。 GetValue には、ここで指定した内容に基づいて適切なデータ型が使われます。

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

pColumnName
[入力] 列名。

pData
[出力] 指定した列の内容へのポインター。

戻り値

文字列データを渡す場合は、テンプレート化されていないバージョンの GetValue を使います。 このメソッドのテンプレートされていないバージョンは、指定した列データを含むバッファーの一部を指す void* を返します。 列が見つからない場合は NULL を返します。

他のすべてのデータ型については、テンプレート化されたバージョンの GetValue を使う方が簡単です。 テンプレート化されたバージョンでは、正常に終了した場合は true を返し、失敗した場合は false を返します。

解説

文字列を含む列を返す場合はテンプレート化されていないバージョンを、その他のデータ型を含む列を返す場合はテンプレート化されたバージョンを使います。

デバッグ モードでは、pData のサイズが、それが指す列のサイズと等しくない場合、アサーションを取得します。

CDynamicAccessor::SetBlobHandling

現在の行の BLOB 処理値を設定します。

構文

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

パラメーター

eBlobHandling
BLOB データを処理する方法を指定します。 次の値を使用できます。

  • DBBLOBHANDLING_DEFAULT: (SetBlobSizeLimit の設定に従い) nBlobSize より大きな列データを BLOB データとして処理し、それを ISequentialStream または IStream オブジェクトを介して取得します。 このオプションを使うと、nBlobSize より大きいデータ、または BLOB データとして DBTYPE_IUNKNOWN が列挙されているデータを含むすべての列をバインドしようとします。

  • DBBLOBHANDLING_NOSTREAMS: (SetBlobSizeLimit の設定に従い) nBlobSize より大きな列データを BLOB データとして処理し、プロバイダーから割り当てられ、コンシューマーが所有するメモリ内で参照を通じて取得します。 このオプションは、複数の BLOB 列があるテーブルで、プロバイダーがアクセサーごとに 1 つの ISequentialStream オブジェクトのみをサポートする場合に便利です。

  • DBBLOBHANDLING_SKIP: BLOB を含むものと認定された列をスキップします (バインドしません) (アクセサーは列値をバインドまたは取得しませんが、列の状態と長さは取得します)。

解説

SetBlobHandling を呼び出してから Open を呼び出す必要があります。

コンストラクター メソッド CDynamicAccessor を使って、BLOB 処理値を DBBLOBHANDLING_DEFAULT に設定します。

CDynamicAccessor::SetBlobSizeLimit

最大 BLOB サイズをバイト単位で設定します。

構文

void SetBlobSizeLimit(DBLENGTH nBlobSize);

パラメーター

nBlobSize
BLOB サイズ制限を指定します。

解説

最大 BLOB サイズをバイト単位で設定します。この値より大きい列データは BLOB として扱われます。 プロバイダーによっては、列に非常に大きなサイズ (2 GB など) を割り当てる場合があります。 通常は、列のメモリにこのサイズを割り当てるのではなく、これらの列を BLOB としてバインドするようにします。 こうすると、すべてのメモリを割り当てる必要がなく、切り捨てを心配することなくすべてのデータを読み取ることができます。 ただし、場合によっては、ネイティブ データ型の大きな列をバインドするように CDynamicAccessor に強制したいことがあります。 これを行うには、Open を呼び出す前に SetBlobSizeLimit を呼び出します。

コンストラクター メソッド CDynamicAccessor を使って、最大 BLOB サイズを既定値の 8,000 バイトに設定します。

CDynamicAccessor::SetLength

指定した列の長さを設定します。

構文

bool SetLength(DBORDINAL nColumn,
   DBLENGTH nLength)throw();

bool SetLength(const CHAR* pColumnName,
   DBLENGTH nLength) throw();

bool SetLength(const WCHAR* pColumnName,
   DBLENGTH nLength) throw();

パラメーター

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

nLength
[入力] 列の長さ (バイト単位)。

pColumnName
[入力] 列名を含む文字列へのポインター。

戻り値

指定した列の長さが正常に設定された場合は、true を返します。 それ以外の場合、この関数は false を返します。

CDynamicAccessor::SetStatus

指定した列の状態を設定します。

構文

bool SetStatus(DBORDINAL nColumn,
   DBSTATUS status)throw();

bool SetStatus(const CHAR* pColumnName,
   DBSTATUS status) throw();

bool SetStatus(const WCHAR* pColumnName,
   DBSTATUS status) throw();

パラメーター

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

status
[入力] 列の状態。 詳細については、「OLE DB プログラマーズ リファレンス」の「DBSTATUS」を参照してください。

pColumnName
[入力] 列名を含む文字列へのポインター。

戻り値

指定した列の状態が正常に設定された場合は、true を返します。 それ以外の場合、この関数は false を返します。

CDynamicAccessor::SetValue

指定した列にデータを格納します。

構文

template <class ctype>
bool SetValue(
   DBORDINAL nColumn,
   constctype& data) throw( );

template <class ctype>
bool SetValue(
   const CHAR * pColumnName,
   const ctype& data) throw( );

template <class ctype>
bool SetValue(
   const WCHAR *pColumnName,
   const ctype& data) throw( );

パラメーター

ctype
[入力] 特別な処理が必要な、文字列型 (CHAR*WCHAR*) 以外のすべてのデータ型を処理するテンプレート化されたパラメーター。 GetValue には、ここで指定した内容に基づいて適切なデータ型が使われます。

pColumnName
[入力] 列名を含む文字列へのポインター。

data
[入力] データを格納するメモリへのポインター。

nColumn
[入力] 列番号。 列番号は 1 から始まります。 値 0 は、ブックマーク列がある場合はそれを示します。

戻り値

文字列データを設定する場合は、テンプレート化されていないバージョンの GetValue を使います。 このメソッドのテンプレートされていないバージョンは、指定した列データを含むバッファーの一部を指す void* を返します。 列が見つからない場合は NULL を返します。

他のすべてのデータ型については、テンプレート化されたバージョンの GetValue を使う方が簡単です。 テンプレート化されたバージョンでは、正常に終了した場合は true を返し、失敗した場合は false を返します。

関連項目

OLE DB コンシューマー テンプレートに関するページ
OLE DB コンシューマー テンプレート リファレンス
CAccessor クラス
CDynamicParameterAccessor クラス
CManualAccessor クラス