⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bakcupdatabase.cpp

📁 一个农用车辆管理系统的雏形
💻 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 + -