CDaoRecordset::Edit

virtual void Edit();
  throw(CDaoException, CMemoryException);

说明:
调用这个函数,可以改变当前记录。
一旦调用了Edit成员函数,对当前记录字段的变化将拷贝到拷贝缓存中。在对记录进行希望的改动后,调用Update保存所做改动。Edit保存记录集数据成员的值。如果调用Edit,修改并再调用Edit,记录值将恢复为第一次Edit调用前的值。
警告:
如果编辑了一条记录,然后未调用Update就滚动到另一条记录,虽然没有警告,也会丢失改动的结果。
有时想通过置为Null(不包含数据)来更新一个列。为此调用带参数TRUE的SetFieldNull来为字段作Null记号。这也引起要更新的列,如果想把值没有改变的字段写入数据源,调用带参数TRUE的SetFieldDirty。即使这个字段原来为Null值也是有效的。
框架对字段数据成员作记号,保证能够通过DAO记录字段交换(DFX)机制把它们写进数据源上的记录。改变字段值通常会自动把这个字段设置为脏的,因此几乎不需要调用SetFieldDirty,但有时想确保列被明确更新或插入,不管字段数据成员中是些什么值。DFX机制也采用PSEUDONULL。有关的更多信息,请参阅CDaoFieldExchange::m_nOperation。
如果没使用双缓存机制,字段值的改变将不会把这个字段设置为脏的。
这种情况下,有必要明确设置这个字段脏。m_bCheckCacheForDirtyFields中包含的标记控制这个自动字段检查。
在多用户环境中,如果对记录集对象被动封锁,则从使用Edit时起直到完成更新,记录将保持封锁。如果对记录集对象主动封锁,则只在更新到数据库之前封锁记录并与以前编辑的记录作比较。如果调用Edit之后记录不变化,Update操作失败,MFC产生一个异常。可以用SetLockingMode改变封锁模式。
注意:
主动封锁总是用于外部数据格式,例如ODBC和可安装的ISAM。
调用Edit之后当前记录保持为当前记录。要调用Edit,必须存在一个当前记录。如果不存在当前记录或者没有打开的表型或动态集型记录集对象的参考,将产生异常。下列情况下调用Edit会导致产生一个CDaoException:
·不存在当前记录
·数据库或记录集只读
·记录中的字段不可更新
·数据库或记录集由其它用户以独占方式打开
·其它用户封锁了包含记录的页面
如果数据源支持事务,可以使Edit调用成为事务的一部分。注意在调用Edit之间和打开记录集之后,应该调用CDaoWorkspace::BeginTrans。还要注意到调用Workspace::CommitTrans并不能取代调用Update来完成Edit操作。有关事务的更多信息,请参阅CDaoWorkspace。
有关更新记录的更多信息,请参阅联机文档“Visual C++程序员指南”中的“DAO记录集:记录集操作”。有关信息,请参阅DAO帮助中的“AddNew方法”、“Edit方法”、“Delete”、“Update方法”、“Updatable特性”。

请参阅:
CDaoRecordset::AddNew, CDaoRecordset::CancelUpdate, CDaoRecordset::CanTransact, CDaoRecordset::Delete, CDaoRecordset::Update