次の方法で共有


CUtlProps クラス

さまざまな OLE DB プロパティ インターフェイスのプロパティを実装します (例: IDBPropertiesIDBPropertiesIRowsetInfo)。

構文

template < class T >
class ATL_NO_VTABLE CUtlProps : public CUtlPropsBase

パラメーター

T
BEGIN_PROPSET_MAP を格納しているクラス。

要件

ヘッダー: atldb.h

メンバー

メソッド

Name 説明
GetPropValue プロパティ セットからプロパティを取得します。
IsValidValue プロパティを設定する前に値を検証するために使います。
OnInterfaceRequested コンシューマーがオブジェクト作成インターフェイスでメソッドを呼び出すときに、オプションのインターフェイスの要求を処理します。
OnPropertyChanged チェーンされたプロパティを処理するために、プロパティを設定した後に呼び出されます。
SetPropValue プロパティ セット内のプロパティを設定します。

解説

このクラスの大部分は実装の詳細です。

CUtlProps には、内部的にプロパティを設定する 2 つのメンバー GetPropValueSetPropValue が含まれています。

プロパティ セット マップで使用されるマクロの詳細については、「BEGIN_PROPSET_MAP」と「END_PROPSET_MAP」を参照してください。

CUtlProps::GetPropValue

プロパティ セットからプロパティを取得します。

構文

OUT_OF_LINE HRESULT GetPropValue(const GUID* pguidPropSet,
   DBPROPID dwPropId,
   VARIANT* pvValue);

パラメーター

pguidPropSet
[入力] PropSet の GUID。

dwPropId
[入力] プロパティ インデックス。

pvValue
[出力] 新しいプロパティ値を含むバリアントへのポインター。

戻り値

失敗した場合は Failure、成功した場合は S_OK。

CUtlProps::IsValidValue

プロパティを設定する前に値を検証するために使います。

構文

virtual HRESULT CUtlPropsBase::IsValidValue(ULONG /* iCurSet */,
   DBPROP* pDBProp);

パラメーター

iCurSet
プロパティセット配列へのインデックス。プロパティ セットが 1 つのみである場合は 0。

pDBProp
DBPROP 構造体のプロパティ ID と新しい値。

戻り値

標準の HRESULT。 既定の戻り値は S_OK です。

解説

プロパティの設定に使おうとしている値に対して実行したい検証ルーチンがある場合は、この関数をオーバーライドする必要があります。 たとえば、パスワード テーブルに対して DBPROP_AUTH_PASSWORD を検証し、有効な値を判別できます。

CUtlProps::OnInterfaceRequested

コンシューマーがオブジェクト作成インターフェイスのいずれかでメソッドを呼び出すときに、オプションのインターフェイスの要求を処理します。

構文

virtual HRESULT CUtlPropsBase::OnInterfaceRequested(REFIID riid);

パラメーター

riid
[入力] 要求されたインターフェイスの IID。 詳細については、(MDAC SDK の) 「OLE DB プログラマーズ リファレンス」の ICommand::Executeriid パラメーターに関する説明を参照してください。

解説

OnInterfaceRequested は、コンシューマーがオブジェクト作成インターフェイスのいずれか (IDBCreateSessionIDBCreateCommandIOpenRowset、または ICommand など) でメソッドを呼び出すときに、オプションのインターフェイスに関するコンシューマーの要求を処理します。 要求されたインターフェイスに対応する OLE DB プロパティを設定します。 たとえば、コンシューマーが IID_IRowsetLocate を要求する場合は、OnInterfaceRequested によって DBPROP_IRowsetLocate インターフェイスが設定されます。 これにより、行セットの作成時に正しい状態が維持されます。

このメソッドは、コンシューマーが IOpenRowset::OpenRowset または ICommand::Execute を呼び出すときに呼び出されます。

コンシューマーがオブジェクトを開いてオプションのインターフェイスを要求する場合、プロバイダーは、そのインターフェイスに関連付けられているプロパティを VARIANT_TRUE に設定する必要があります。 プロパティ固有の処理を許可するために、プロバイダーの Execute メソッドが呼び出される前に OnInterfaceRequested が呼び出されます。 既定では、OnInterfaceRequested は次のインターフェイスを処理します。

  • IRowsetLocate

  • IRowsetChange

  • IRowsetUpdate

  • IConnectionPointContainer

  • IRowsetScroll

他のインターフェイスを処理したい場合は、データ ソース、セッション、コマンド、または行セット クラスでこの関数をオーバーライドして、関数を処理します。 オーバーライドは、通常の set および get プロパティ インターフェイスを通過して、プロパティを設定するとチェーンされたプロパティも設定されるようにする必要があります (OnPropertyChanged に関するページを参照)。

CUtlProps::OnPropertyChanged

チェーンされたプロパティを処理するために、プロパティを設定した後に呼び出されます。

構文

virtual HRESULT OnPropertyChanged(ULONG /* iCurSet */,
   DBPROP* pDBProp);

パラメーター

iCurSet
プロパティセット配列へのインデックス。プロパティ セットが 1 つのみである場合は 0。

pDBProp
DBPROP 構造体のプロパティ ID と新しい値。

戻り値

標準の HRESULT。 既定の戻り値は S_OK です。

解説

値が別のプロパティ値に依存しているブックマークや更新など、チェーンされたプロパティを処理する場合は、この関数をオーバーライドする必要があります。

この関数では、ユーザーは DBPROP* パラメーターからプロパティ ID を取得します。 これで、この ID をチェーンするプロパティと比較できるようになります。 プロパティが見つかると、他のプロパティと組み合わせて設定されるプロパティと共に SetProperties が呼び出されます。 このケースでは、DBPROP_IRowsetLocateDBPROP_LITERALBOOKMARKS、または DBPROP_ORDEREDBOOKMARKS プロパティを取得した場合に、DBPROP_BOOKMARKS プロパティを設定できます。

HRESULT OnPropertyChanged(ULONG /*iCurSet*/, DBPROP* pDBProp)
{
   ATLASSERT(pDBProp != NULL);

   DWORD dwPropertyID = pDBProp->dwPropertyID;

   if (dwPropertyID == DBPROP_IRowsetLocate || 
      dwPropertyID == DBPROP_LITERALBOOKMARKS ||
      dwPropertyID == DBPROP_ORDEREDBOOKMARKS)
   {
      CComVariant var = pDBProp->vValue;

      if (var.boolVal == VARIANT_TRUE)
      {
         // Set the bookmarks property as these are chained
         CComVariant bookVar(true);
         CDBPropSet set(DBPROPSET_ROWSET);
         set.AddProperty(DBPROP_BOOKMARKS, bookVar);

         return SetProperties(1, &set);
      }
   }

   return S_OK;
}

CUtlProps::SetPropValue

プロパティ セット内のプロパティを設定します。

構文

HRESULT SetPropValue(const GUID* pguidPropSet,
   DBPROPID dwPropId,
   VARIANT* pvValue);

パラメーター

pguidPropSet
[入力] PropSet の GUID。

dwPropId
[入力] プロパティ インデックス。

pvValue
[入力] 新しいプロパティ値を含むバリアントへのポインター。

戻り値

失敗した場合は Failure、成功した場合は S_OK。

関連項目

OLE DB プロバイダー テンプレートに関するページ
OLE DB プロバイダー テンプレートのアーキテクチャ