CUtlProps (Clase)
Implementa propiedades para una variedad de interfaces de propiedad OLE DB (por ejemplo, IDBProperties
, IDBProperties
y IRowsetInfo
).
Sintaxis
template < class T >
class ATL_NO_VTABLE CUtlProps : public CUtlPropsBase
Parámetros
T
La clase que contiene BEGIN_PROPSET_MAP
.
Requisitos
Encabezado: atldb.h
Miembros
Métodos
Nombre | Descripción |
---|---|
GetPropValue | Obtiene una propiedad de un conjunto de propiedades. |
IsValidValue | Se usa para validar un valor antes de establecer una propiedad. |
OnInterfaceRequested | Controla las solicitudes de una interfaz opcional cuando un consumidor llama a un método en una interfaz de creación de objetos. |
OnPropertyChanged | Se llama después de establecer una propiedad para controlar las propiedades encadenadas. |
SetPropValue | Establece una propiedad en un conjunto de propiedades. |
Comentarios
La mayoría de esta clase es un detalle de implementación.
CUtlProps
contiene dos miembros para establecer propiedades internamente: GetPropValue y SetPropValue.
Para obtener más información sobre las macros usadas en un mapa de conjunto de propiedades, vea BEGIN_PROPSET_MAP y END_PROPSET_MAP.
CUtlProps::GetPropValue
Obtiene una propiedad de un conjunto de propiedades.
Sintaxis
OUT_OF_LINE HRESULT GetPropValue(const GUID* pguidPropSet,
DBPROPID dwPropId,
VARIANT* pvValue);
Parámetros
pguidPropSet
[in] GUID del elemento PropSet.
dwPropId
[in] Índice de propiedad.
pvValue
[out] Puntero a una variante que contiene el nuevo valor de propiedad.
Valor devuelto
Failure
si se produce un error y S_OK si se ejecuta correctamente.
CUtlProps::IsValidValue
Se usa para validar un valor antes de establecer una propiedad.
Sintaxis
virtual HRESULT CUtlPropsBase::IsValidValue(ULONG /* iCurSet */,
DBPROP* pDBProp);
Parámetros
iCurSet
Índice en la matriz del conjunto de propiedades; cero si solo hay un conjunto de propiedades.
pDBProp
Id. de propiedad y nuevo valor en una estructura DBPROP.
Valor devuelto
Un HRESULT estándar. El valor devuelto predeterminado es S_OK.
Comentarios
Si tiene alguna rutina de validación que quiera ejecutar en un valor que va a usar para establecer una propiedad, debe invalidar esta función. Por ejemplo, podría validar DBPROP_AUTH_PASSWORD en una tabla de contraseñas para determinar un valor válido.
CUtlProps::OnInterfaceRequested
Controla las solicitudes de una interfaz opcional cuando un consumidor llama a un método en una de las interfaces de creación de objetos.
Sintaxis
virtual HRESULT CUtlPropsBase::OnInterfaceRequested(REFIID riid);
Parámetros
riid
[in] IID de la interfaz solicitada. Para obtener más información, vea la descripción del parámetro riid de ICommand::Execute
en la Referencia del programador de OLE DB (en el SDK de MDAC).
Comentarios
OnInterfaceRequested
controla las solicitudes del consumidor de una interfaz opcional cuando un consumidor llama a un método en una de las interfaces de creación de objetos, (como IDBCreateSession
, IDBCreateCommand
, IOpenRowset
o ICommand
). Establece la propiedad OLE DB correspondiente para la interfaz solicitada. Por ejemplo, si el consumidor solicita IID_IRowsetLocate
, OnInterfaceRequested
establece la interfaz DBPROP_IRowsetLocate
. Al hacerlo, se mantiene el estado correcto durante la creación del conjunto de filas.
Se llama a este método cuando el consumidor llama a IOpenRowset::OpenRowset
o ICommand::Execute
.
Si un consumidor abre un objeto y solicita una interfaz opcional, el proveedor debe establecer la propiedad asociada a esa interfaz en VARIANT_TRUE. Para permitir el procesamiento específico de la propiedad, se llama a OnInterfaceRequested
antes de llamar al método Execute
del proveedor. De manera predeterminada, OnInterfaceRequested
controla las interfaces siguientes:
IRowsetLocate
IRowsetChange
IRowsetUpdate
IConnectionPointContainer
IRowsetScroll
Si quiere controlar otras interfaces, invalide esta función en el origen de datos, la sesión, el comando o la clase del conjunto de filas para procesar las funciones. La invalidación debe pasar por las interfaces de propiedades normales set/get para asegurarse de que establecer propiedades también hace que se establezcan las propiedades encadenadas (vea OnPropertyChanged).
CUtlProps::OnPropertyChanged
Se llama después de establecer una propiedad para controlar las propiedades encadenadas.
Sintaxis
virtual HRESULT OnPropertyChanged(ULONG /* iCurSet */,
DBPROP* pDBProp);
Parámetros
iCurSet
Índice en la matriz del conjunto de propiedades; cero si solo hay un conjunto de propiedades.
pDBProp
Id. de propiedad y nuevo valor en una estructura DBPROP.
Valor devuelto
Un HRESULT estándar. El valor devuelto predeterminado es S_OK.
Comentarios
Si quiere controlar propiedades encadenadas, como marcadores o actualizaciones cuyos valores dependen del valor de otra propiedad, debe invalidar esta función.
Ejemplo
En esta función, el usuario obtiene el id. de propiedad del parámetro DBPROP*
. Ahora es posible comparar el id. con una propiedad que se va a encadenar. Cuando se encuentra la propiedad, se llama a SetProperties
con la propiedad que ahora se establecerá junto con la otra propiedad. En este caso, si uno obtiene la propiedad DBPROP_IRowsetLocate
, DBPROP_LITERALBOOKMARKS
o DBPROP_ORDEREDBOOKMARKS
, se puede establecer la propiedad 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
Establece una propiedad en un conjunto de propiedades.
Sintaxis
HRESULT SetPropValue(const GUID* pguidPropSet,
DBPROPID dwPropId,
VARIANT* pvValue);
Parámetros
pguidPropSet
[in] GUID del elemento PropSet.
dwPropId
[in] Índice de propiedad.
pvValue
[in] Puntero a una variante que contiene el nuevo valor de propiedad.
Valor devuelto
Failure
si se produce un error y S_OK si se ejecuta correctamente.
Consulte también
Plantillas de proveedores OLE DB
Arquitectura de plantillas de proveedores OLE DB