MFC界面编程基础(26):更新记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17017545/article/details/85234028
上一篇:MFC界面编程基础(25):设计记录操作界面 下一篇:MFC界面编程基础(27):排序和筛选

更新记录操作包括修改,添加和删除记录,CRecordSet类提供了AddNew()、Delete()、Edit()、Update()、CancelUpdate()、Requery()等成员函数用于更新记录。
AddNew()函数用于添加一个新的空记录,所有字段数据成员的值都为NULL。Delete()函数用于删除当前记录,Edit()函数用于修改当前记录各字段数据成员的值。Update()函数用于AddNew和Edit操作后的数据的最后保存,CancelUpdate()函数用于取消任何由AddNew和Edit操作产生的待处理的更新。Requery()函数用于重新执行对记录集的查询,当记录集类型是快照型时,快照不反映用户添加的记录,这时需要调用该函数重新查询更新后的记录集。
下面在Exam2_1中增加添加新记录和删除记录的功能。

〖例〗在“record”记录下添加三个菜单项如下图所示。一个菜单项是分割线,另外两个菜单项分别是“增加记录”和“删除记录”。菜单ID设置为ID_RECORD_ADD和ID_RECORD_DELETE。
在这里插入图片描述
在菜单项上使用右键菜单在视图类中为菜单项ID_RECORD_ADD和ID_RECORD_DELETE映射COMMAND消息处理函数, 得到成员函数OnRecordAdd()和OnRecordDelete()。
在这里插入图片描述
在这里插入图片描述
添加CExam2_1View的BOOL类数据成员m_addflg,用以记录是否进入添加模式,当m_addflg的值为true时,进入添加模式。在CExam2_1View的构造函数中初始化m_addflg的值为false。
为成员函数OnRecordAdd()添加代码,增加一条空记录,并清除ID编辑框的只读属性。实现代码如程序清单2-2所示。

程序清单2-2:Add Record 菜单消息处理函数

void CExam2_1View::OnRecordAdd() 
{
	// TODO: Add your command handler code here
	m_pSet->AddNew();  //进入添加模式
    m_addflg=true;    //设置添加模式标志
	CEdit* m_pCtrl=(CEdit*)GetDlgItem(IDC_CustomerID);
	m_pCtrl->SetReadOnly(false); //清除ID编辑框的只读属性
	UpdateData(false);   //用新记录的字段数据成员值更新控件显示
}

使用ClassWizard添加CExam2_1View类的虚函数OnMove()函数,并在OnMove()函数中添加代码,通过移动记录将添加的新记录保存到表中。实现代码如程序清单2-3所示

程序清单2-3:OnMove()函数

BOOL CExam2_1View::OnMove(UINT nIDMoveCommand) 
{
	// TODO: Add your specialized code here and/or call the base class
	//添加模式处理
	if (m_addflag)
	{
		m_addflag = false;
		//使用控件值更新记录集字段数据成员
		UpdateData(true);
		//将记录集更新保存到表中
		if (m_pSet->CanUpdate())
		{
			m_pSet->Update();
		}
		//重新查询记录集
		m_pSet->Requery();
		//以更新后的记录集数据成员更新控件显示
		UpdateData(false);
		CEdit* m_pCtrl = (CEdit*)GetDlgItem(IDC_CUSTOMERID);
		//设置ID编辑框为只读
		m_pCtrl->SetReadOnly(true); 
		return true;
	}
	else
	{
		return CRecordView::OnMove(nIDMoveCommand);
	}
}

为成员函数OnRecordDelete()添加代码,删除当前记录,实现代码如程序清单2-4所示。

程序清单2-4:Delete Record菜单处理函数

void CExam2_1View::OnRecordDelete() 
{
	// TODO: Add your command handler code here
	m_pSet->Delete();//删除当前记录
	m_pSet->MoveNext();//移到下一记录
	if (m_pSet->IsEOF())//删除记录为最后一条记录处理
	{
		m_pSet->MoveLast();
	}
	if (m_pSet->IsBOF())//删空记录集处理
	{
		m_pSet->SetFieldNull(NULL);
	}
	UpdateData(false);//更新控件显示
}
上一篇:MFC界面编程基础(25):设计记录操作界面 下一篇:MFC界面编程基础(27):排序和筛选

猜你喜欢

转载自blog.csdn.net/qq_17017545/article/details/85234028