CUtlProps クラス
さまざまな OLE DB プロパティ インターフェイスのプロパティを実装します (例: IDBProperties
、IDBProperties
、IRowsetInfo
)。
構文
template < class T >
class ATL_NO_VTABLE CUtlProps : public CUtlPropsBase
パラメーター
T
BEGIN_PROPSET_MAP
を格納しているクラス。
要件
ヘッダー: atldb.h
メンバー
メソッド
Name | 説明 |
---|---|
GetPropValue | プロパティ セットからプロパティを取得します。 |
IsValidValue | プロパティを設定する前に値を検証するために使います。 |
OnInterfaceRequested | コンシューマーがオブジェクト作成インターフェイスでメソッドを呼び出すときに、オプションのインターフェイスの要求を処理します。 |
OnPropertyChanged | チェーンされたプロパティを処理するために、プロパティを設定した後に呼び出されます。 |
SetPropValue | プロパティ セット内のプロパティを設定します。 |
解説
このクラスの大部分は実装の詳細です。
CUtlProps
には、内部的にプロパティを設定する 2 つのメンバー GetPropValue と SetPropValue が含まれています。
プロパティ セット マップで使用されるマクロの詳細については、「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::Execute
の riid パラメーターに関する説明を参照してください。
解説
OnInterfaceRequested
は、コンシューマーがオブジェクト作成インターフェイスのいずれか (IDBCreateSession
、IDBCreateCommand
、IOpenRowset
、または 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_IRowsetLocate
、DBPROP_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。