上一篇: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):排序和筛选 |
---|