基本介紹
- 外文名:CRecordset::EDIT
- 性質:科學
- 類別:計算機學
- 屬於:編程
CRecordset::Edit
virtual void Edit();
throw( CDBException, CMemoryException );
注意:
如果你已經實現了成組行讀取,你就不能調用Edit。這將導致一個失敗斷言。雖然類CRecordset不提供用於更新成組數據行的機制,但是你可以使用ODBC API函式SQLSetPos來編寫你自己的函式。有關如何做到這一點的例子,請參見DBEFETCH示例。
在某些情況下,你可能會想通過將一個列置為Null來更新它。要實現這一點,可以使用TRUE為參數調用SetFieldNull函式,來標記此欄位為Null;這樣也使此欄位表列被更新。如果你想要將某一欄位寫入數據源,即使是它的值沒有改變,則可以使用TRUE為參數調用SetFieldDirty函式。即使此欄位的值為Null,這也同樣可行。
如果數據源支持事務,則應用程式可以讓Edit成為事務的一部分。值得注意的是,你應當在調用Edit之前,但在打開記錄集之後,調用CDatabase::BeginTrans函式。還要注意,調用CDatabase::CommitTrans並不能代替調用Update來完成Edit操作。要獲取有關事務的更多信息,請參見CDatabase類。
根據當前的加鎖方式,正被更新的記錄可能被Edit加鎖,直到應用程式調用Update或滾動到另一個記錄;也可能它只在Edit調用期間被加鎖。你可以利用SetLocking Mode來改變加鎖方式。
如果應用程式在調用Update之前滾動到了一個新的記錄,則恢復當前記錄的先前值。如果對一個不可修改的記錄集調用Edit,或沒有當前記錄,則將拋出一個CDBException異常。
示例:
// CRecordset::Edit的示例:
// 編輯一個記錄
// 首先設定編輯快取
// rsCustSet.Edit();
// 然後編輯記錄的欄位數據成員
rsCustSet.m_dwCustID = 2795;
rsCustSet.m_strCustomer = "ones Mfg";
// 最後,完成此操作
if ( !rsCustSet.Update() )
// 處理更新失敗