CUtlProps 類別
實作各種 OLE DB 屬性介面的屬性(例如、 IDBProperties
IDBProperties
和 IRowsetInfo
。
語法
template < class T >
class ATL_NO_VTABLE CUtlProps : public CUtlPropsBase
參數
T
包含的 BEGIN_PROPSET_MAP
類別。
需求
Header: atldb.h
成員
方法
名稱 | 描述 |
---|---|
GetPropValue | 從屬性集取得屬性。 |
IsValidValue | 用來在設定屬性之前驗證值。 |
OnInterfaceRequested | 當取用者在物件建立介面上呼叫方法時,處理選擇性介面的要求。 |
OnPropertyChanged | 設定屬性以處理鏈結屬性之後呼叫。 |
SetPropValue | 設定屬性集中的屬性。 |
備註
此類別大部分都是實作詳細數據。
CUtlProps
包含兩個成員,用於在內部設定屬性: GetPropValue 和 SetPropValue。
如需屬性集對應中使用的巨集詳細資訊,請參閱 BEGIN_PROPSET_MAP 和 END_PROPSET_MAP。
CUtlProps::GetPropValue
從屬性集取得屬性。
語法
OUT_OF_LINE HRESULT GetPropValue(const GUID* pguidPropSet,
DBPROPID dwPropId,
VARIANT* pvValue);
參數
pguidPropSet
[in]PropSet 的 GUID。
dwPropId
[in]屬性索引。
pvValue
[out]包含新屬性值之 Variant 的指標。
傳回值
Failure
失敗時,如果成功,S_OK。
CUtlProps::IsValidValue
用來在設定屬性之前驗證值。
語法
virtual HRESULT CUtlPropsBase::IsValidValue(ULONG /* iCurSet */,
DBPROP* pDBProp);
參數
iCurSet
屬性集陣列中的索引;如果只有一個屬性集,則為零。
pDBProp
DBPROP 結構中的屬性標識碼和新值。
傳回值
標準 HRESULT。 默認傳回值為 S_OK。
備註
如果您有想要在即將用來設定屬性的值上執行的任何驗證例程,您應該覆寫此函式。 例如,您可以針對密碼數據表驗證DBPROP_AUTH_PASSWORD,以判斷有效的值。
CUtlProps::OnInterfaceRequested
當取用者在其中一個物件建立介面上呼叫方法時,處理選擇性介面的要求。
語法
virtual HRESULT CUtlPropsBase::OnInterfaceRequested(REFIID riid);
參數
riid
[in]所要求介面的 IID。 如需詳細資訊,請參閱 OLE DB 程式設計人員參考中 riid 參數ICommand::Execute
的描述(在 MDAC SDK 中)。
備註
OnInterfaceRequested
當取用者在其中一個物件建立介面上呼叫方法時,處理選擇性介面的取用者要求(例如 IDBCreateSession
、 IDBCreateCommand
IOpenRowset
或 ICommand
)。 它會設定所要求介面的對應 OLE DB 屬性。 例如,如果取用者要求 IID_IRowsetLocate
, OnInterfaceRequested
請 DBPROP_IRowsetLocate
設定 介面。 這樣做會在數據列集建立期間維持正確的狀態。
當取用者呼叫 或 ICommand::Execute
時,會呼叫IOpenRowset::OpenRowset
這個方法。
如果取用者開啟物件並要求選擇性介面,提供者應該將與該介面相關聯的屬性設定為VARIANT_TRUE。 若要允許屬性特定的處理, OnInterfaceRequested
請在呼叫提供者的 Execute
方法之前呼叫 。 根據預設,會 OnInterfaceRequested
處理下列介面:
IRowsetLocate
IRowsetChange
IRowsetUpdate
IConnectionPointContainer
IRowsetScroll
如果您想要處理其他介面,請在數據源、工作階段、命令或數據列集類別中覆寫此函式,以處理函式。 覆寫應該經過一般集合/取得屬性介面,以確保設定屬性也會設定任何鏈結的屬性(請參閱 OnPropertyChanged)。
CUtlProps::OnPropertyChanged
設定屬性以處理鏈結屬性之後呼叫。
語法
virtual HRESULT OnPropertyChanged(ULONG /* iCurSet */,
DBPROP* pDBProp);
參數
iCurSet
屬性集陣列中的索引;如果只有一個屬性集,則為零。
pDBProp
DBPROP 結構中的屬性標識碼和新值。
傳回值
標準 HRESULT。 默認傳回值為 S_OK。
備註
如果您想要處理鏈結屬性,例如書籤或更新其值相依於另一個屬性值的更新,您應該覆寫此函式。
範例
在此函式中,用戶會從 DBPROP*
參數取得屬性標識碼。 現在,可以將標識碼與屬性比較為鏈結。 找到 屬性時, 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
[in]PropSet 的 GUID。
dwPropId
[in]屬性索引。
pvValue
[in]包含新屬性值之 Variant 的指標。
傳回值
Failure
失敗時,如果成功,S_OK。