IRowsetUpdateImpl 类
IRowsetUpdate 接口的 OLE DB 模板实现。
语法
template <
class T,
class Storage,
class UpdateArray = CAtlArray<Storage>,
class RowClass = CSimpleRow,
class MapClass = CAtlMap <RowClass::KeyType, RowClass*>
>
class IRowsetUpdateImpl : public IRowsetChangeImpl<
T,
Storage,
IRowsetUpdate,
RowClass,
MapClass>
参数
T
派生自 IRowsetUpdateImpl
的类。
存储
用户记录。
UpdateArray
包含用于更新行集的缓存数据的数组。
RowClass
HROW
的存储单元。
MapClass
提供程序持有的所有行句柄的存储单元。
要求
标头: atldb.h
成员
接口方法(与 IRowsetChange 一起使用)
名称 | 描述 |
---|---|
SetData | 设置一列或多列中的数据值。 |
接口方法(与 IRowsetUpdate 一起使用)
名称 | 描述 |
---|---|
GetOriginalData | 获取最近传输到数据源或从数据源获取的数据,忽略挂起的更改。 |
GetPendingRows | 返回具有挂起的更改的行列表。 |
GetRowStatus | 返回指定行的状态。 |
撤消 | 撤消自上次提取或更新以来对行进行的任何更改。 |
更新 | 传输自上次提取或更新以来对行进行的任何更改。 |
实现方法(回调)
名称 | 描述 |
---|---|
IsUpdateAllowed | 用于在允许更新之前检查安全性、完整性等。 |
数据成员
名称 | 描述 |
---|---|
m_mapCachedData | 包含延迟操作的原始数据。 |
注解
应首先阅读并了解 IRowsetChange 的文档,因为文档中所述的所有内容也适用于这里。 还应阅读“OLE DB 程序员参考”第 6 章中关于设置数据的内容。
IRowsetUpdateImpl
实现 OLE DB IRowsetUpdate
接口,使使用者能够延迟将使用 IRowsetChange
进行的更改传输到数据源,以及在传输之前撤消更改。
重要
强烈建议在尝试实现提供程序之前阅读以下文档:
“OLE DB 程序员参考”的第 6 章
另请参阅如何在 UpdatePV 示例中使用
RUpdateRowset
类
IRowsetUpdateImpl::SetData
设置一列或多列中的数据值。
语法
STDMETHOD (SetData )(HROW hRow,
HACCESSOR hAccessor,
void* pSrcData);
参数
请参阅“OLE DB 程序员参考”中的 IRowsetChange::SetData。
备注
此方法重写 IRowsetChangeImpl::SetData 方法,但包括原始数据的缓存,以允许立即或延迟处理操作。
IRowsetUpdateImpl::GetOriginalData
获取最近传输到数据源或从数据源获取的数据,忽略挂起的更改。
语法
STDMETHOD (GetOriginalData )(HROW hRow,
HACCESSOR hAccessor,
void* pData);
参数
请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::GetOriginalData。
IRowsetUpdateImpl::GetPendingRows
返回具有挂起的更改的行列表。
语法
STDMETHOD (GetPendingRows )(HCHAPTER /* hReserved */,
DBPENDINGSTATUS dwRowStatus,
DBCOUNTITEM* pcPendingRows,
HROW** prgPendingRows,
DBPENDINGSTATUS** prgPendingStatus);
参数
hReserved
[in] 对应于 IRowsetUpdate::GetPendingRows 中的 hChapter 参数。
有关其他参数,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::GetPendingRows。
备注
有关详细信息,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::GetPendingRows。
IRowsetUpdateImpl::GetRowStatus
返回指定行的状态。
语法
STDMETHOD (GetRowStatus )(HCHAPTER /* hReserved */,
DBCOUNTITEM cRows,
const HROW rghRows[],
DBPENDINGSTATUS rgPendingStatus[]);
参数
hReserved
[in] 对应于 IRowsetUpdate::GetRowStatus 中的 hChapter 参数。
有关其他参数,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::GetRowStatus。
IRowsetUpdateImpl::Undo
撤消自上次提取或更新以来对行进行的任何更改。
语法
STDMETHOD (Undo )(HCHAPTER /* hReserved */,
DBCOUNTITEM cRows,
const HROW rghRows[ ],
DBCOUNTITEM* pcRowsUndone,
HROW** prgRowsUndone,
DBROWSTATUS** prgRowStatus);
参数
hReserved
[in] 对应于 IRowsetUpdate::Undo 中的 hChapter 参数。
pcRowsUndone
[out] 对应于 IRowsetUpdate::Undo 中的 pcRows 参数。
prgRowsUndone
[in] 对应于 IRowsetUpdate::Undo 中的 prgRows 参数。
有关其他参数,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::Undo。
IRowsetUpdateImpl::Update
传输自上次提取或更新以来对行进行的任何更改。
语法
STDMETHOD (Update )(HCHAPTER /* hReserved */,
DBCOUNTITEM cRows,
const HROW rghRows[],
DBCOUNTITEM* pcRows,
HROW** prgRows,
DBROWSTATUS** prgRowStatus);
参数
hReserved
[in] 对应于 IRowsetUpdate::Update 中的 hChapter 参数。
有关其他参数,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::Update。
注解
通过调用 IRowsetChangeImpl::FlushData 来传输更改。 使用者必须调用 CRowset::Update 才能使更改生效。 将 prgRowstatus 设置为适当的值,如“OLE DB 程序员参考”中的行状态中所述。
IRowsetUpdateImpl::IsUpdateAllowed
重写此方法以在更新之前检查安全性、完整性等。
语法
HRESULT IsUpdateAllowed(DBPENDINGSTATUS /* [in] */ /* status */,
HROW /* [in] */ /* hRowUpdate */,
DBROWSTATUS* /* [out] */ /* pRowStatus */);
参数
status
[in] 行上挂起的操作的状态。
hRowUpdate
[in] 用户要更新的行的句柄。
pRowStatus
[out] 返回给用户的状态。
备注
如果确定应允许更新,则返回 S_OK;否则返回 E_FAIL。 如果允许更新,还需要将 IRowsetUpdateImpl::Update 中的 DBROWSTATUS
设置为适当的行状态。
IRowsetUpdateImpl::m_mapCachedData
包含延迟操作的原始数据的映射。
语法
CAtlMap<
HROW hRow,
Storage* pData
>
m_mapCachedData;
参数
hRow
数据行的句柄。
pData
指向要缓存的数据的指针。 数据的类型为“存储”(用户记录类)。 请参阅 IRowsetUpdateImpl 类中的“存储”模板参数。