分享方式:


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的類別。

Storage
用戶記錄。

UpdateArray
數位,包含用於更新數據列集的快取數據。

RowClass
HROW儲存單位。

MapClass
提供者所持有之所有數據列句柄的儲存單位。

需求

Header: atldb.h

成員

介面方法 (與 IRowsetChange 搭配使用)

名稱 描述
SetData 設定一個或多個數據行中的數據值。

介面方法 (與 IRowsetUpdate 搭配使用)

名稱 描述
GetOriginalData 取得最近傳送至數據源或從數據源取得的數據,忽略暫止的變更。
GetPendingRows 傳回具有暫止變更的數據列清單。
GetRowStatus 傳回指定數據列的狀態。
恢復 復原自上次擷取或更新之後對數據列所做的任何變更。
更新 傳輸自上次擷取或更新之後對數據列所做的任何變更。

實作方法(回呼)

名稱 描述
IsUpdateAllowed 用來檢查安全性、完整性等等,再允許更新。

資料成員

名稱 描述
m_mapCachedData 包含延遲作業的原始數據。

備註

您應該先閱讀並瞭解 IRowsetChange 的文件,因為這裡所述的一切也適用於這裡。 您也應該閱讀 OLE DB 程式設計人員關於設定數據的第 6 章。

IRowsetUpdateImpl 會實作 OLE DB IRowsetUpdate 介面,這可讓取用者延遲傳輸對數據源所做的 IRowsetChange 變更,並在傳輸之前復原變更。

重要

強烈建議您在嘗試實作提供者之前先閱讀下列檔:

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
要快取之數據的指標。 數據的類型 為 Storage (使用者記錄類別)。 請參閱 IRowsetUpdateImpl 類別中的記憶體範本自變數。

另請參閱

OLE DB 提供者範本
OLE DB 提供者範本架構
建立可更新的提供者