Поделиться через


Класс CUtlProps

Реализует свойства для различных интерфейсов свойств OLE DB (например, IDBProperties, IDBPropertiesи IRowsetInfo).

Синтаксис

template < class T >
class ATL_NO_VTABLE CUtlProps : public CUtlPropsBase

Параметры

T
Класс, содержащий BEGIN_PROPSET_MAPобъект .

Требования

Заголовок: 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] GUID для PropSet.

dwPropId
[in] Индекс свойства.

pvValue
[out] Указатель на вариант, содержащий новое значение свойства.

Возвращаемое значение

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 для запрошенного интерфейса. Дополнительные сведения см. в описании параметра ICommand::Execute riid в справочнике программиста OLE DB (в пакете SDK MDAC).

Замечания

OnInterfaceRequestedобрабатывает запросы потребителей для необязательного интерфейса, когда потребитель вызывает метод в одном из интерфейсов создания объекта (напримерIDBCreateSession, , IDBCreateCommandIOpenRowsetилиICommand). Он задает соответствующее свойство OLE DB для запрошенного интерфейса. Например, если потребитель запрашивает IID_IRowsetLocateOnInterfaceRequested DBPROP_IRowsetLocate интерфейс. Это обеспечивает правильное состояние во время создания набора строк.

Этот метод вызывается, когда потребитель вызывает IOpenRowset::OpenRowset или ICommand::Execute.

Если потребитель открывает объект и запрашивает необязательный интерфейс, поставщик должен задать свойство, связанное с этим интерфейсом, 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] GUID для PropSet.

dwPropId
[in] Индекс свойства.

pvValue
[in] Указатель на вариант, содержащий новое значение свойства.

Возвращаемое значение

Failure при сбое и S_OK в случае успешного выполнения.

См. также

Шаблоны поставщика OLE DB
Архитектура шаблона поставщика OLE DB