【数据库】MFC ODBC(四)

七、滚动记录数据库

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则代表能够添加记录。
相关文章
相关标签/搜索