程序员之家 >> 文章 >> 开发语言 >> VC++
VC++——CRecordset类中的修改、添加和删除记录
作者:娜   来源:程序员之家   发布者:admin
时间:2009-11-26 11:09:14   点击:2036

今天和大家分享的是CRecordset中的修改、添加和删除记录,希望对大家有所帮助。要修改记录,应该按下列步骤进行:

 

调用Edit成员函数.调用该函数后就进入了编辑模式,程序可以修改域数据成员.注意不要在一个空的记录集中调用Edit,否则会产生异常.Edit函数会把当前域数据成员的内容保存在一个缓冲区中,这样做有两个目的,一是可以与域数据成员作比较以判断哪些字段被改变了,二是在必要的时侯可以恢复域数据成员原来的值.若再次调用Edit,则将从缓冲区中恢复域数据成员,调用后程序仍处于编辑模式.调用Move(AFX_MOVE_REFRESH)Move(0)可退出编辑模式(AFX_MOVE_REFRESH的值为0),同时该函数会从缓冲区中恢复域数据成员.

 

设置域数据成员的新值.

 

调用Update完成编辑.Update把变化后的记录写入数据源并结束编辑模式.

 

要向记录集中添加新的记录,应该按下列步骤进行:

 

调用AddNew成员函数.调用该函数后就进入了添加模式,该函数把所有的域数据成员都设置成NULL(注意,在数据库术语中,NULL是指没有值,这与C++NULL是不同的).与Edit一样,AddNew会把当前域数据成员的内容保存在一个缓冲区中,在必要的时侯,程序可以再次调用AddNew取消添加操作并恢复域数据成员原来的值,调用后程序仍处于添加模式.调用Move(AFX_MOVE_REFRESH)可退出添加模式,同时该函数会从缓冲区中恢复域数据成员.

 

设置域数据成员.

 

调用UpdateUpdate把域数据成员中的内容作为新记录写入数据源,从而结束了添加.

 

如果记录集是快照,那么在添加一个新的记录后,需要调用Requery重新查询,因为快照无法反映添加操作.

 

要删除记录集的当前记录,应按下面两步进行:

 

调用Delete成员函数.该函数会同时给记录集和数据源中当前记录加上删除标记.注意不要在一个空记录集中调用Delete,否则会产生一个异常.

 

滚动到另一个记录上以跳过删除记录.

 

 

上面提到的函数声明为:

 

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

 

virtual void AddNew( );throw( CDBException );

 

virtual void Delete( );throw( CDBException );

 

virtual BOOL Update( );throw( CDBException );

若更新失败则函数返回FALSE,且会产生一个异常.

 

 

 

  在对记录集进行更改以前,程序也许要调用下列函数来判断记录集是否是可以更改的,因为如果在不能更改的记录集中进行修改、添加或删除将导致异常的产生.

 

BOOL CanUpdate( ) const; //返回TRUE表明记录是可以修改、添加和删除的.

 

BOOL CanAppend( ) const; //返回TRUE则表明可以添加记录.

转载请注明出处:  程序员之家  http://www.sunxin.org

最新文章
点击排行