CDaoRecordset::AddNew

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

说明:
调用这个成员函数,可以把一个新记录添加到表型或动态集型记录集中。记录字段初始为Null(数据库术语中,Null表示“不含任何值”,与C++中的NULL不同)。要完成这个操作,必须调用Update成员函数。Update把改动保存到数据源。
警告:
如果编辑了一条记录,然后未调用Update就滚动到另一条记录,虽然没有警告,也会丢失改动的结果。
如果通过调用AddNew把一条记录添加到动态集型记录集中,则这条记录在记录集中是可视的,并且包含在基础表中。在这里它对所有新CDaoRecordset对象均为可见的。
新记录的位置取决于记录集的类型:
·动态集型记录集中,不保证新记录的插入位置。这是由于性能和并行的原因,在Microsoft Jet 3.0中改变的。如果想使新添加的记录成为当前记录,应该获取最后更新的记录的书签,然后移动到那个书签:
rs.SetBookmark(rs.GetLast MidifiedBookmark());
·在已经指定了索引的表型记录集中,记录按排序顺序返回到它们的正确位置。如果未指定索引,新记录返回到记录集末尾。
使用AddNew之前的当前记录保持为当前记录。如果想使新记录成为当前的并且记录集支持书签,则把SetBookmark调用到支持由基本DAO记录集对象的LastModified特性设置标识的书签。这样做对确定计数(自动增加)字段在添加记录中的值是有用的。有关的更多信息,请参阅GetLastMidifiedBookmark。
如果数据库支持事务,可以使AddNew调用成为事务的一部分。有关事务的更多信息,请参阅CDaoWorkspace。注意,应该在调用AddNew之前先调用CDaoWorkspace::BeginTrans。
对没有调用过Open成员函数的记录集,调用AddNew是不合法的。如果对不能附加的记录集调用AddNew,将产生一个CDaoException。可以通过调用CanAppend确定记录集是否可更新。
框架对字段数据成员作记号,保证能够通过DAO记录字段交换(DFX)机制把它们写进数据源上的记录。改变字段值通常会自动把这个字段设置为脏的,因此几乎不需要调用SetFieldDirty,但有时想确保列被明确更新或插入,不管字段数据成员中是些什么值。DFX机制也采用PSEUDONULL。有关的更多信息,请参阅CDaoFieldExchange::m_nOperation。
如果没有使用双缓存机制,字段值的改变将不会把这个字段设置为脏的。这种情况下,有必要明确设置这个字段脏。m_bCheckCacheForDirtyFields中包含的标记控制这个自动字段检查。
注意:
如果双缓存记录(即自动字段检查有效),则调用CancelUpdate将把成员变量恢复到调用AddNew或Edit之前的值。
有关更新记录的更多信息,请参阅联机文档“Visual C++程序员指南”中的“DAO记录集:记录集操作”。有关信息,请参阅DAO帮助中的“AddNew方法”、“CancelUpdate方法”、“LastModified方法”和“EditMode特性”。

请参阅:
CDaoRecordset::CanUpdate, CDaoRecordset::CancelUpdate, CDaoRecordset::Delete, CDaoRecordset::Edit, CDaoRecordset::Update, CDaoRecordset::CanTransact