3.9.6 数据库备份界面的实现
备份界面允许用户改变路径来保存备份文件。改变路径按钮实现代码参考如下:
代码位置:见光盘中本章源代码的BACKUPDLG类。
- 1 void BACKUPDLG::OnButton1()
- 2 {
- 3 CFileDialog cfile(FALSE,"bak",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
- 4 "备份文件(*.bak)|*.bak|All Files (*.*)|*.*||"); //打开【文件】对话框
- 5 if(cfile.DoModal()==IDOK) //单击【确定】按钮
- 6 {
- 7 CString str;
- 8 str=cfile.GetPathName(); //获取路径名称
- 9 if(str!="")
- 10 m_edit=str; //保存路径
- 11 UpdateData(false); //编辑框输出显示
- 12 }
- 13 else return;
- 14 }
第3行代码实现打开对话框的信息的设置,默认打开扩展名为bak的文件,也可以选择显示所有文件(*.*),如果不选择则默认为"F:\\huchao.bak"。
第8行代码获取用户选择的路径名,并通过编辑框显示。
设置好路径和备份名,单击【备份】按钮执行备份,本系统实现了保存多个备份文件的功能,代码中实现了获取备份文件的序号,备份语句的构造,具体实现代码如下:
代码位置:见光盘中本章源代码的BACKUPDLG类。
- 1 void BACKUPDLG::OnButton3()
- 2 {
- 3 if(MessageBox("确定备份?","系统提示",MB_ICONQUESTION|MB_YESNO)==6)
- 4 {
- 5 CString sqlstr,a;
- 6 if(m_edit)
- 7 {
- 8 try
- 9 {
- 10 sqlstr.Format("select Max(id) as maxid from tb_backup"); //构造查询语句
- 11 _RecordsetPtr rs=NULL;
- 12 rs.CreateInstance(__uuidof(Recordset)); //记录集初始化
- 13 rs->Open((_variant_t )sqlstr,m_connection.GetInterfacePtr(),
- 14 adOpenDynamic,adLockOptimistic,adCmdText); //打开表,执行查询
- 15 a=(LPCSTR)(_bstr_t)rs->Fields->GetItem("maxid")->Value; //获取当前最大的备份号
- 16 int b=atoi(a); //数据类型转换
- 17 b++; //备份号加1
- 18 sqlstr.Format("insert into tb_backup values (%d,'%s','%s')",b,
- 19 CTime::GetCurrentTime().Format("%Y-%m-%d"),m_edit); //构造插入语句
- 20 rs=NULL;
- 21 rs.CreateInstance(__uuidof(Recordset));
- 22 rs->Open((_variant_t )sqlstr,m_connection.GetInterfacePtr(),
- 23 adOpenDynamic,adLockOptimistic,adCmdText);
- 24 sqlstr.Format("backup database Sales to disk='%s'",m_edit); //构造备份语句
- 25 m_connection->Execute((_bstr_t)sqlstr,NULL,adCmdUnknown); //执行备份操作
- 26 MessageBox("备份成功!");
- 27 m_connection->Close(); //断开连接
- 28 CDialog::OnOK();
- 29 }
- 30 catch(...)
- 31 {
- 32 MessageBox("备份失败!");
- 33 return;
- 34 }
- 35 }
- 36 }
- 37 else return;
- 38 }
第10行代码实现了获取备份文件中最大的序号。
第18~19行代码实现保存备份的序号、时间、文件名。
第24~25行代码实现数据库Sales的备份。
第30~34行代码实现备份出错信息的提醒。