七、滚动记录数据库
CRecordset提供了几个成员函数用来在记录集中滚动。当用这些函数滚动到一个新记录时,框架会自动地把新记录的内容拷贝到域数据成员中。框架
void MoveNext( ); //前进一个记录 void MovePrev( ); //后退一个记录 void MoveFirst( ); //滚动到记录集中的第一个记录 void MoveLast( ); //滚动到记录集中的最后一个记录
//该函数用于滚动到由参数nRows指定的绝对位置处。若nRows为负数,则从后往前滚动。例如,当nRows为-1时,函数就滚动到记录集的末尾。注意,该函数不会跳过被删除的记录。 void SetAbsolutePosition( long nRows );
注意:若是记录集是空的,那么调用上述函数将产生异常。另外,必须保证滚动没有超出记录集的边界。函数
long GetRecordCount( ) const;// 调用GetRecordCount可得到记录集中的记录总数。
注意:GetRecordCount返回的其实是用户在记录集中滚动的最远距离。要想真正返回记录总数,只有调用MoveNext移动到记录集的末尾(MoveLast不行)。spa
八、修改、添加和删除记录code
(1)修改记录blog
1)调用Edit成员函数。调用该函数后就进入了编辑模式,程序能够修改域数据成员。注意不要在一个空的记录集中调用Edit,不然会产生异常。
it
2)设置域数据成员的新值。io
3)调用Update完成编辑。Update把变化后的记录写入数据源并结束编辑模式。ast
m_ChangeLineSet.Edit(); //字段设置... m_ChangeLineSet.m_Date=datatemp.Date; //更新记录 m_ChangeLineSet.Update(); //重建记录集 m_ChangeLineSet.Requery();
(2)添加记录class
1)调用AddNew成员函数。调用该函数后就进入了添加模式,该函数把全部的域数据成员都设置成NULL(注意,在数据库术语中,NULL是指没有值,这与C++的NULL是不一样的)。与Edit同样,AddNew会把当前域数据成员的内容保存在一个缓冲区中。
2)设置域数据成员。
3)调用Update。Update把域数据成员中的内容做为新记录写入数据源,从而结束了添加。若是记录集是快照,那么在添加一个新的记录后,须要调用Requery从新查询,由于快照没法反映添加操做。
if (m_ChangeLineSet.CanAppend()) { m_ChangeLineSet.AddNew(); //字段设置... m_ChangeLineSet.m_Date=datatemp.Date; //更新记录 m_ChangeLineSet.Update(); //重建记录集 m_ChangeLineSet.Requery(); }
(3)删除记录
1)调用Delete成员函数。该函数会同时给记录集和数据源中当前记录加上删除标记。注意不要在一个空记录集中调用Delete,不然会产生一个异常。
2)滚动到另外一个记录上以跳过删除记录。
//删除记录集,不须要Update if (m_ChangeLineSet.CanUpdate()) m_ChangeLineSet.Delete();
在对记录集进行更改之前,程序也许要调用下列函数来判断记录集是不是能够更改的,由于若是在不能更改的记录集中进行修改、添加或删除将致使异常的产生。
BOOL CanUpdate( ) const; //返回TRUE代表记录是能够修改、添加和删除的。 BOOL CanAppend( ) const; //返回TRUE则代表能够添加记录。