次の方法で共有


IDBSchemaRowsetImpl クラス

スキーマ行セットの実装を提供します。

構文

template <class SessionClass>
class ATL_NO_VTABLE IDBSchemaRowsetImpl : public IDBSchemaRowset

パラメーター

SessionClass
IDBSchemaRowsetImpl が継承されるクラス。 通常、このクラスは、ユーザーのセッション クラスです。

要件

ヘッダー: atldb.h

メンバー

メソッド

Name 説明
CheckRestrictions スキーマ行セットに対して制限の妥当性をチェックします。
CreateSchemaRowset テンプレート パラメーターで指定されたオブジェクトの COM オブジェクトの作成関数を実装します。
SetRestrictions 特定のスキーマ行セットでサポートする制限を指定します。

インターフェイス メソッド

名前 説明
GetRowset スキーマ行セットを返します。
GetSchemas IDBSchemaRowsetImpl::GetRowsetでアクセスできるスキーマ行セットの一覧を返します。

解説

このクラスは、 IDBSchemaRowset インターフェイスと、テンプレート化された作成関数 CreateSchemaRowsetを実装します。

OLE DB はスキーマ行セットを使用して、プロバイダーのデータに関するデータを返します。 このようなデータは、"メタデータ" と呼ばれることがよくあります。"OLE DB プログラマーズ リファレンス" の「IDBSchemaRowset」で説明されているように、既定では、プロバイダーは常に DBSCHEMA_TABLESDBSCHEMA_COLUMNSDBSCHEMA_PROVIDER_TYPESをサポートする必要があります。 スキーマ行セットはスキーマ マップで指定します。 スキーマ マップ エントリの詳細については、「 SCHEMA_ENTRY」を参照してください。

ATL オブジェクト ウィザードの OLE DB プロバイダー ウィザードでは、プロジェクトのスキーマ行セットのコードが自動的に生成されます (既定では、ウィザードは前述の必須スキーマ行セットをサポートしています)。ATL オブジェクト ウィザードを使用してコンシューマーを作成すると、ウィザードはスキーマ行セットを使用して適切なデータをプロバイダーにバインドします。 正しいメタデータを提供するようにスキーマ行セットを実装していないと、正しいデータがバインドされません。

プロバイダーでスキーマ行セットをサポートする方法については、「 スキーマ行セットのサポート」を参照してください。

スキーマ行セットの詳細については、 OLE DB プログラマーズ リファレンススキーマ行セットに関するセクションを参照してください。

IDBSchemaRowsetImpl::CheckRestrictions

スキーマ行セットに対して制限の妥当性をチェックします。

構文

HRESULT CheckRestrictions(REFGUID rguidSchema,
   ULONG cRestrictions,  const VARIANT rgRestrictions[]);

パラメーター

rguidSchema
[入力] 要求するスキーマ行セット GUID ( DBSCHEMA_TABLESなど) への参照。

cRestrictions
[入力] コンシューマーがスキーマ行セットに渡した制限の数。

rgRestrictions
[入力] 設定する制限値の長さ cRestrictions の配列。 詳しくは、「SetRestrictions」の rgRestrictions パラメーターの説明をご覧ください。

解説

CheckRestrictions を使用して、スキーマ行セットに対して制限の妥当性をチェックします。 DBSCHEMA_TABLESDBSCHEMA_COLUMNSDBSCHEMA_PROVIDER_TYPES の各スキーマ行セットに対する制限がチェックされます。 これを呼び出して、コンシューマーの IDBSchemaRowset::GetRowset の呼び出しが正しいかどうかを判断します。 上記以外のスキーマ行セットをサポートする場合は、このタスクを実行する独自の関数を作成する必要があります。

CheckRestrictions は、コンシューマーが、プロバイダーによってサポートされている正しい制限と正しい制限の種類 (たとえば、文字列の場合は VT_BSTR) を使って GetRowset を呼び出しているかどうかを判断します。 また、正しい制限数がサポートされているかどうかも判断します。 CheckRestrictions は、既定で SetRestrictions 呼び出しを通じて、任意の行セットについてプロバイダーがサポートしている制限の種類を確認します。 次に、コンシューマーが呼び出した制限とプロバイダーがサポートしている制限を比較することで、処理は成功または失敗します。

スキーマ行セットについて詳しくは、Windows SDK の "OLE DB プログラマーズ リファレンス" の「IDBSchemaRowset」をご覧ください。

IDBSchemaRowsetImpl::CreateSchemaRowset

テンプレート パラメーターで指定されたオブジェクトの COM オブジェクトの作成関数を実装します。

構文

template template <class SchemaRowsetClass>
HRESULT CreateSchemaRowset(IUnknown *pUnkOuter,
   ULONG cRestrictions,
   const VARIANT rgRestrictions[],
   REFIID riid,
   ULONG cPropertySets,
   DBPROPSET rgPropertySets[],
   IUnknown** ppRowset,
   SchemaRowsetClass*& pSchemaRowset);

パラメーター

pUnkOuter
[入力] 集約時は外部 IUnknown。それ以外の場合は NULL。

cRestrictions
[入力] スキーマ行セットに適用する制限の数。

rgRestrictions
[入力] 行セットに適用する cRestrictionsVARIANTの配列。

riid
[入力] 出力 IUnknown での QueryInterface へのインターフェイス。

cPropertySets
[入力] 設定するプロパティ セットの数。

rgPropertySets
[入力] 設定するプロパティを指定する DBPROPSET 構造体の配列。

ppRowset
[出力] riid によって要求された送信 IUnknown。 この IUnknown は、スキーマ行セット オブジェクトのインターフェイスです。

pSchemaRowset
[出力] スキーマ行セット クラスのインスタンスへのポインター。 通常、このパラメーターは使用されません。使用できるのは、スキーマ行セットを COM オブジェクトに渡す前に、その行セットで多くの作業を実行する必要があるときです。 pSchemaRowset の有効期間は ppRowset によってバインドされます。

戻り値

標準の HRESULT 値。

解説

この関数は、あらゆる種類のスキーマ行セットに対する汎用作成関数を実装します。 通常、この関数は、ユーザーからは呼び出されません。 これはスキーマ マップの実装によって呼び出されます。

IDBSchemaRowsetImpl::SetRestrictions

特定のスキーマ行セットでサポートする制限を指定します。

構文

void SetRestrictions(ULONG cRestrictions,
   GUID* /* rguidSchema */,
   ULONG* rgRestrictions);

パラメーター

cRestrictions
[入力] rgRestrictions 配列内の制限の数、および rguidSchema 配列内の GUID の数。

rguidSchema
[入力] 制限をフェッチするスキーマ行セットの GUID の配列。 配列の各要素は、1 つのスキーマ行セットの GUID ( DBSCHEMA_TABLESなど) を保持します。

rgRestrictions
[入力] 設定する制限値の長さ cRestrictions の配列。 各要素は、GUID によって識別されるスキーマ行セットの制限に対応します。 スキーマ行セットがプロバイダーによってサポートされていない場合、その要素は 0 に設定されます。 それ以外の場合、 ULONG 値は、そのスキーマ行セットでサポートされている制限を表すビット マスクを保持します。 特定のスキーマ行セットに対応する制限について詳しくは、Windows SDK の "OLE DB プログラマーズ リファレンス" の「IDBSchemaRowset」にあるスキーマ行セット GUID の表をご覧ください。

解説

IDBSchemaRowset オブジェクトは SetRestrictions を呼び出して、特定のスキーマ行セットでサポートする制限を判断します (これは、アップキャストされたポインターを通じて GetSchemas によって呼び出されます)。 制限により、コンシューマーは一致する行だけをフェッチできます (たとえば、テーブル "MyTable" 内のすべての列を検索します)。 制限は省略可能であり、制限がサポートされていない場合 (既定)、常にすべてのデータが返されます。

このメソッドの既定の実装では、rgRestrictions 配列の要素が 0 に設定されます。 既定以外の制限を設定する場合は、セッション クラスで既定値をオーバーライドします。

スキーマ行セットのサポートの実装については、「 スキーマ行セットのサポート」を参照してください。

スキーマ行セットをサポートするプロバイダーの例については、 UpdatePV サンプルを参照してください。

スキーマ行セットについて詳しくは、Windows SDK の "OLE DB プログラマーズ リファレンス" の「IDBSchemaRowset」をご覧ください。

IDBSchemaRowsetImpl::GetRowset

スキーマ行セットを返します。

構文

STDMETHOD (GetRowset)(IUnknown *pUnkOuter,
   REFGUID rguidSchema,
   ULONG cRestrictions,
   const VARIANT rgRestrictions[],
   REFIID riid,
   ULONG cPropertySets,
   DBPROPSET rgPropertySets[],
   IUnknown **ppRowset);

パラメーター

pUnkOuter
[入力] 集約時は外部 IUnknown。それ以外の場合は NULL。

rguidSchema
[入力] 要求するスキーマ行セット GUID ( DBSCHEMA_TABLESなど) への参照。

cRestrictions
[入力] 行セットに適用する制限の数。

rgRestrictions
[入力] 制限を表す cRestrictionsVARIANTの配列。

riid
[入力] 新しく作成されたスキーマ行セットに対して要求する IID。

cPropertySets
[入力] 設定するプロパティ セットの数。

rgPropertySets
[入力/出力] 新しく作成されたスキーマ行セットに対して設定する DBPROPSET 構造体の配列。

ppRowset
[出力] 新しく作成されたスキーマ行セットに対して要求するインターフェイスへのポインター。

解説

このメソッドを使用するには、ユーザーはセッション クラスにスキーマ マップを持っている必要があります。 GetRowset は、rguidSchema パラメーターがいずれかのマップ エントリの GUID と一致する場合、スキーマ マップ情報を使って、特定の行セット オブジェクトを作成します。 マップ エントリについては、「 SCHEMA_ENTRY 」を参照してください。

Windows SDK の「IDBSchemaRowset::GetRowset」をご覧ください。

IDBSchemaRowsetImpl::GetSchemas

IDBSchemaRowsetImpl::GetRowsetでアクセスできるスキーマ行セットの一覧を返します。

構文

STDMETHOD (GetSchema s )(ULONG * pcSchemas,
   GUID ** prgSchemas,
   ULONG** prgRest);

パラメーター

pcSchemas
[出力] スキーマの数が格納される ULONG へのポインター。

prgSchemas
[出力] スキーマ行セット GUID の配列へのポインターが格納される GUID の配列へのポインター。

prgRest
[出力] 制限配列が格納される ULONGの配列へのポインター。

解説

このメソッドは、プロバイダーによってサポートされるすべてのスキーマ行セットの配列を返します。 Windows SDK の「IDBSchemaRowset::GetSchemas」をご覧ください。

この関数の実装では、セッション クラスでスキーマ マップを持っている必要があります。 スキーマ マップ情報を使用して、マップ内のスキーマの GUID の配列で応答します。 これは、プロバイダーによってサポートされるスキーマを表します。

関連項目

スキーマ行セット クラスと Typedef クラス
スキーマ行セットのサポート
SCHEMA_ENTRY
UpdatePV