7、滚动记录
CRecordset提供了几个成员函数用来在记录集中滚动。当用这些函数滚动到一个新记录时,框架会自动地把新记录的内容拷贝到域数据成员中。
void MoveNext( ); //前进一个记录 void MovePrev( ); //后退一个记录 void MoveFirst( ); //滚动到记录集中的第一个记录 void MoveLast( ); //滚动到记录集中的最后一个记录
//该函数用于滚动到由参数nRows指定的绝对位置处。若nRows为负数,则从后往前滚动。例如,当nRows为-1时,函数就滚动到记录集的末尾。注意,该函数不会跳过被删除的记录。 void SetAbsolutePosition( long nRows );
注意:如果记录集是空的,那么调用上述函数将产生异常。另外,必须保证滚动没有超出记录集的边界。
long GetRecordCount( ) const;// 调用GetRecordCount可获得记录集中的记录总数。
注意:GetRecordCount返回的实际上是用户在记录集中滚动的最远距离。要想真正返回记录总数,只有调用MoveNext移动到记录集的末尾(MoveLast不行)。
8、修改、添加和删除记录
(1)修改记录
1)调用Edit成员函数。调用该函数后就进入了编辑模式,程序可以修改域数据成员。注意不要在一个空的记录集中调用Edit,否则会产生异常。
2)设置域数据成员的新值。
3)调用Update完成编辑。Update把变化后的记录写入数据源并结束编辑模式。
m_ChangeLineSet.Edit(); //字段设置... m_ChangeLineSet.m_Date=datatemp.Date; //更新记录 m_ChangeLineSet.Update(); //重建记录集 m_ChangeLineSet.Requery();
(2)添加记录
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则表明可以添加记录。