CRecordset::Edit

允许访问当前记录的更改。

virtual void Edit( );

备注

在调用 Edit后,可以通过直接重置其值更改字段数据成员。 在数据源时,对的后续调用 更新 成员函数保存更改该操作完成。

备注

如果已实现批量取行,则不能调用 Edit。这导致生成失败的断言。虽然选件类 CRecordset 为更新数据批量行不提供框架,使用ODBC API函数 SQLSetPos,可以编写自己的函数。有关批量取行的更多信息,请参见文章 记录集:获取记录(odbc)

Edit 保存记录集的数据成员的值。 如果调用 Edit,进行更改,则再次调用 Edit,记录的值被还原到什么是,在第一 Edit 调用之前。

有时,您可能需要通过使并更新列(包含数据)。 为此,请调用与 TRUE 参数的 SetFieldNull 标记字段Null;还会导致列更新。 如果希望字段被写入数据源。,即使其值尚未更改,请调用与 TRUE参数的 SetFieldDirty。 可以这样做,即使该字段的值Null。

如果数据源支持事务,可以使 Edit 调用的一部分的事务。 请注意您应在调用 Edit 之前调用 CDatabase::BeginTrans,因此,在打开后记录集。 另外请注意调用 CDatabase::CommitTrans 的这不是调用 Update 备用项完成 Edit 操作。 有关事务的更多信息,请参见选件类 CDatabase

基于当前锁定模式,则的记录更新可能由 Edit 锁定,直到调用 Update 或滚动到另一个记录,也只能锁定 Edit 调用过程。 您可以更改与 SetLockingMode的锁定模式。

还原当前记录以前的值,如果移动到新记录在调用 Update之前。 CDBException 引发调用,则无法更新的记录集 Edit,或者没有当前记录。

有关更多信息,请参见位于 事务(odbc)记录集:锁定记录(odbc)

异常

此方法会引发类型 CDBException* 和 **CMemoryException***的异常。

示例

// To edit a record, first set up the edit buffer
rsCustSet.Edit();

// Then edit field data members for the record
rsCustSet.m_BillingID = 2795;
rsCustSet.m_ContactFirstName = _T("Jones Mfg");

// Finally, complete the operation
if(!rsCustSet.Update())
{
    // Handle the failure to update
    AfxMessageBox(_T("Couldn't update record!"));
}

要求

Header: afxdb.h

请参见

参考

CRecordset选件类

层次结构图

CRecordset::Update

CRecordset::AddNew

CRecordset::Delete

CRecordset::SetFieldDirty

CRecordset::SetFieldNull

CRecordset::CanUpdate

CRecordset::CanTransact

CRecordset::SetLockingMode