📄 bakcupdatabase.cpp
字号:
// BakcupDatabase.cpp : 实现文件
//
#include "stdafx.h"
#include "NongCheManage.h"
#include "BakcupDatabase.h"
#include ".\bakcupdatabase.h"
// CBakcupDatabase 对话框
IMPLEMENT_DYNAMIC(CBakcupDatabase, CDialog)
CBakcupDatabase::CBakcupDatabase(CWnd* pParent /*=NULL*/)
: CDialog(CBakcupDatabase::IDD, pParent)
, m_type(false)
{
}
CBakcupDatabase::~CBakcupDatabase()
{
}
void CBakcupDatabase::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SAVEFILEPATH, m_savefilepath);
DDX_Control(pDX, IDC_PROGRESS1, m_progress1);
}
BEGIN_MESSAGE_MAP(CBakcupDatabase, CDialog)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDC_BROWSESAVE, OnBnClickedBrowsesave)
END_MESSAGE_MAP()
// CBakcupDatabase 消息处理程序
BOOL CBakcupDatabase::OnInitDialog()
{
CDialog::OnInitDialog();
m_savefilepath.setFont(14);
m_savefilepath.textColor(RGB(0,0,128));
if(this->m_type)
SetDlgItemText(IDOK,"备 份");
return TRUE;
}
void CBakcupDatabase::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}
void CBakcupDatabase::OnBnClickedOk()
{
if(theApp.m_ChildWindowOpen)
{
AfxMessageBox("执行此操作前必须关闭本系统的所有子窗口!");
return;
}
CString path(_T(""));
GetDlgItemText(IDC_SAVEFILEPATH,path);
if(path.IsEmpty())
{
AfxMessageBox("必须填写文件位置!");
GotoDlgCtrl(GetDlgItem(IDC_BROWSESAVE));
return;
}
theApp.m_pConn->Close();
theApp.m_pConn=NULL;
//this->DetachSqlDB("NJ2007");//分离数据库
//压缩及解压示例,但在压缩后应加密(zip->zdp),在解压前应解密,特别注意,在解压后不应释放对象
/*CCabinet cab;//创建对象
cab.CreateCabinet ("d:\\农机.cab");//创建以参数命名的压缩包
cab.AddFile2Cab ("d:\\农机中心农机专用表.xls");//向压缩包中增加文件
cab.AddFile2Cab ("d:\\复件 农机中心农机专用表.xls");//同上
cab.FlushCab ();//释放对象
cab.Decompress( "农机.cab", "d:\\");//解压,第一个参数为压缩文件名,第二个参数为解压路径
//cab.Compress ("d:\\复件 农机中心农机专用表1.xls", NULL);
//cab.Decompress ("d:\\农机.cab",NULL);*/
if(this->m_type)
{
this->DetachSqlDB("NJ2007");//分离数据库
//备份(拷贝MDF及LDF文件并打包)
}
else
{
//恢复(从包在解压出MDF及LDF文件)
}
//theApp.AttachSqlD(LPCTSTR dbname,LPCTSTR file1,LPCTSTR file2);//附加数据库
//theApp.makedatabase();
OnOK();
}
void CBakcupDatabase::OnBnClickedBrowsesave()
{
if(this->m_type)
{
CString path=theApp.GetBrowsePath();
if(!path.IsEmpty())
{
SetDlgItemText(IDC_SAVEFILEPATH,path);
}
}
else
{
CString filename=_T("农用车档案管理系统数据备份文件(*.zdp)|*.zdp||");
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,filename);
if(dlg.DoModal()==IDOK)
{
char exeFullPath[MAX_PATH];
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
CString str(exeFullPath);
if(dlg.GetPathName().MakeUpper()==str.MakeUpper())
{
MessageBox("当前正执行文件拒绝任何操作!","警告",MB_ICONEXCLAMATION);
return;
}
else
SetDlgItemText(IDC_SAVEFILEPATH,dlg.GetPathName());
}
else
MessageBox("未选择数据库文件!","警告",MB_ICONEXCLAMATION);
}
}
bool CBakcupDatabase::DetachSqlDB(LPCTSTR dbname)//分离指定SQL数据库
{
theApp.ConSqlDB();
ASSERT(theApp.m_pConn != NULL);
ASSERT(strcmp(dbname, _T("")) != 0);
try
{
////设置数据库为单用户模式
CString strExec(_T("ALTER DATABASE "));
strExec+=dbname;
strExec+=" SET SINGLE_USER with ROLLBACK IMMEDIATE";
theApp.m_pConn->Execute(_bstr_t(strExec), NULL, adCmdText);
////分离数据库
CString lpstrExec(_T("EXEC sp_detach_db '"));
lpstrExec+=dbname;
lpstrExec+="','true'";
theApp.m_pConn->Execute(_bstr_t(lpstrExec), NULL, adCmdText);
theApp.m_pConn->Close();
theApp.m_pConn=NULL;
}
catch(_com_error &e)
{
CString strComError;
strComError.Format("错误编号: %08lx\n错误信息: %s\n错误源: %s\n错误描述: %s",
e.Error(), // 错误编号
e.ErrorMessage(), // 错误信息
(LPCSTR) e.Source(), // 错误源
(LPCSTR) e.Description()); // 错误描述
::MessageBox(NULL,"断开数据库连接失败\r\n"+strComError,"错误",MB_ICONEXCLAMATION);
return false;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -