255上位机VC MFC使用ODBC捕获异常与处理
255上位机VC MFC使用ODBC捕获异常与处理
功能展示
有时在删除数据库记录时,某些情况会出现错误警告,这是因为没有为删除操作作充分的错误处理,当前例程以删除数据库记录为例演示如何捕获异常及处理异常,效果如图,点击删除记录会删除数据库内数据且进行删除操作的异常捕获与处理;
要点提示
MFC能够很好的进行默认的错误处理,但个别情况还是不能满足我们的要求,如上一例程在删除操作时即使删除成功了还会报错,提示更新出错,这时我们就得自己处理异常而不用MFC默认的处理方式; 错误的捕获与处理可以用try,,,catch组合块,在当前实现 TRY 。。。。CATCH中任何异常都会被捕获; 实现功能 1.按照前面例程或当前视频中的方法,用根目录的Student.mdb创建数据源; 2.新建一个应用前面数据源的基于单文档的应用程序,具体过程可参考视频学习; 3.给VIEW类添加一新变量BOOLm_bAdd;//标识是否在添加新记录 ,并初始化m_bAdd=FALSE; 4.按程序界面,添加三编辑框,ID分别为IDC_ID,IDC_NAME,IDC_GRADYEAR,分别关联SET类中的三个变量 m_ID; m_Name; m_GradYear; 再分别添加按钮<添加记录)><删除记录><修改记录,关联函数 - void CGkbc8View::OnRecdsetAdd()
- {
- if(m_bAdd)
- {
- OnMove(ID_RECORD_FIRST);
- }
- m_pSet->AddNew(); //点击一次 准备新项,再点击添加
- m_bAdd=TRUE;
- UpdateData(FALSE);
- }
复制代码- void CGkbc8View::OnRecordDelete()
- {
- if(AfxMessageBox("您确认删除该记录??",MB_YESNO)!=IDYES)
- return;
- if(m_bAdd)
- {
- m_pSet->CancelUpdate();
- m_bAdd=FALSE;
- m_pSet->MovePrev();
- return;
- }
- try{
- m_pSet->Delete();
- }
- catch(CDBException* e1)
- {
- AfxMessageBox("删除失败:\n"+e1->m_strError,MB_ICONEXCLAMATION);
- m_pSet->MoveFirst();
- e1->Delete();
- UpdateData(FALSE);
- return;
- }
- try{
- m_pSet->MoveNext();
- if(m_pSet->IsDeleted())
- m_pSet->MoveFirst();
- if(m_pSet->IsDeleted())
- AfxThrowDBException(SQL_ERROR,m_pSet->m_pDatabase,m_pSet->m_hstmt);
- UpdateData(FALSE);
- }
- catch(CDBException* e2)
- {
- AfxMessageBox("记录集没有记录!!",MB_ICONEXCLAMATION);
- e2->Delete();
- m_pSet->Close();
- m_pSet->Open();
- OnRecdsetAdd();
- }
- }
复制代码- 5.添加虚函数OnMove
- BOOL CGkbc8View::OnMove(UINT nIDMoveCommand)
- {
- if(m_bAdd)//判断是否在添加记录
- {
- if(!UpdateData())
- return FALSE;
- if(m_pSet->CanUpdate())
- m_pSet->Update();
- m_pSet->Requery();
- UpdateData(FALSE);
- m_bAdd=FALSE;
- return TRUE;
- }
- return CRecordView::OnMove(nIDMoveCommand);
- }
复制代码我们来演示下功能实现的整个过程
|