?? 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 + -