设为首页 加入收藏

TOP

3.9.7 数据库还原界面的实现(1)
2013-10-07 14:52:45 来源: 作者: 【 】 浏览:52
Tags:3.9.7 数据库 还原 面的 实现

3.9.7  数据库还原界面的实现(1)

还原模块实现起来要比备份复杂些。主要是因为还原的时候要断开连接,否则是不允许还原的。还原界面中路径选择设计与备份一样,在此不再重复说明。首先介绍如何在列表控件中显示所有的备份文件。相关代码如下:

代码位置:见光盘中本章源代码的CRESTOREDLG类。

  1. 1  void CRESTOREDLG::SetListStyle()  
  2. 2  {                                                        //列表控件初始化  
  3. 3    m_list.InsertColumn(0,"序号",LVCFMT_LEFT,100);  
  4. 4   m_list.InsertColumn(1,"时间",LVCFMT_LEFT,140);  
  5. 5   m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);  
  6. 6    m_record=NULL;  
  7. 7   m_record.CreateInstance(__uuidof(Recordset));           //记录集初始化  
  8. 8   CString sqlstr;  
  9. 9   sqlstr.Format("select * from tb_backup");               //查找备份号  
  10. 10      m_record->Open((_variant_t )sqlstr,theApp.m_connection.GetInterfacePtr(),  
  11. 11                         adOpenDynamic,adLockOptimistic,adCmdText);                                                                           //执行查找备份号操作  
  12. 12      try  
  13. 13      {  
  14. 14          int i=0;  
  15. 15          while(!m_record->_EOF)                          //记录没有移动到最后  
  16. 16          {  
  17. 17              CString str=(LPCSTR)(_bstr_t)m_record->Fields->GetItem("id")->Value;                                                            //获取备份号  
  18. 18              m_list.InsertItem(i,str);                       //插入到列表控件中  
  19. 19              COleDateTime tm;  
  20. 20              tm=(COleDateTime)m_record->Fields->GetItem("backuptime")->Value;                                                                //获取备份时间  
  21. 21              m_list.SetItemText(i,1,tm.Format("%Y-%m-%d-%H:%M:%S"));                                                                     //插入到列表控件中  
  22. 22              i++;  
  23. 23              m_record->MoveNext();                           //记录后移  
  24. 24          }  
  25. 25      }  
  26. 26      catch(...)  
  27. 27      {  
  28. 28          MessageBox("没有还原记录!");  
  29. 29          CDialog::OnCancel();  
  30. 30      }  
  31. 31  }  

第8~11行代码打开数据表tb_backup,该表保存所有备份文件的序号、名称、路径。

第19~21行代码实现了时间的输出,这里面涉及COleDateTime类型的数据类型到字符串CString的转换。

tb_backup数据表中存储以前备份的文件信息,通过遍历数据表读取各条记录写入到列表控件中完成初始化操作。

当用户选中某条记录后,单击【数据还原】按钮,实现数据库的还原操作。下面介绍还原的实现过程,相关代码参考如下:

代码位置:见光盘中本章源代码的CRESTOREDLG类。

  1. 1  void CRESTOREDLG::OnButton3()  
  2. 2  {  
  3. 3      AfxBeginThread(restore,this);                        //启动线程  
  4. 4      UpdateData();  
  5. 5      try  
  6. 6      {  
  7. 7         theApp.m_connection->Close();  
  8. 8         CString sqlstr;  
  9. 9                                                           //获得数据库连接进程  
  10. 10         sqlstr="select spid from master..sysprocesses where dbid=db_id('Sales')";  
  11. 11         _RecordsetPtr recordset;                             //定义记录集对象  
  12. 12         recordset.CreateInstance(__uuidof(Recordset));       //记录集对象初始化  
  13. 13         recordset=theApp.m_connection1->Execute((_bstr_t)sqlstr,NULL,   
  14. adModeUnknown);  
  15. 14         while(!recordset->_EOF)                          //记录没有到最后  
  16. 15         {  
  17. 16             CString temp=(LPCSTR)(_bstr_t)recordset->Fields->GetItem("spid")->   
  18. Value;  
  19. 17             sqlstr.Format("kill %i",atoi(temp));  
  20. 18                                                          //断开连接数据库进程  
  21. 19             theApp.m_connection1->Execute((_bstr_t)sqlstr,NULL,adModeUnknown);  
  22. 20             recordset->MoveNext();                           //记录后移  
  23. 21         }  
  24. 22         sqlstr.Format(" restore database Sales from disk='%s'",m_edit);                                                                  //构造数据还原语句  
  25. 23         theApp.m_connection1->Execute((_bstr_t)sqlstr,NULL,adModeUnknown);                                                               //执行数据还原操作  
  26. 24         Sleep(70000);                                    //延迟连接数据库  
  27. 25         MessageBox("还原成功!");  
  28. 26         CDialog::OnCancel();  
  29. 27         theApp.ConnectSql("driver={SQL Server};Server=HC\\MSSQL2008;   
  30. 28                                                     Database=Sales");//重新连接            
  31. 29      }  
  32. 30      catch(...)  
  33. 31      {  
  34. 32          MessageBox("还原失败");  
  35. 33          CDialog::OnCancel();  
  36. 34      }  
  37. 35  }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.9.7 数据库还原界面的实现(2) 下一篇3.10.1 系统安装配置

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: