首先到MSSQL的資料庫(master)中建立一個「預存程序(stored procedure)」:
CREATE PROCEDURE backupdb
@dbName varchar(10),
@directory varchar(100)
AS
backup database @dbName
to disk=@directory
然後到BCB中建立一個新的專案(Project1),使用三個元件(Button1, ADOConnection1, ADOStoredProc1),請先設定ADOConnection1中的ConnectionString的屬性,使之與MSSQL連結。
其餘程式碼如下:
String __fastcall TForm1::GetSqlServerPath() // 抓取MSSQL路徑
{
String result,tmp;
TADOQuery *Query = new TADOQuery(this);
Query->Connection = ADOConnection1;
Query->Close();
Query->SQL->Clear();
Query->SQL->Add("select filename from sysdatabases where name='master'"); // 單引號中的master改為要備份的資料庫名稱
Query->Open();
tmp = Query->FieldByName("filename")->AsString;
result = tmp.SubString(1, tmp.Length() - 15); // 取得資料庫路徑
Query->Free();
return result;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String daStr = FormatDateTime("yyyy-mm-dd hh-mm-ss",Now());
try{
String path = Form1->GetSqlServerPath() + "backup";
ADOStoredProc1->Close();
ADOStoredProc1->Connection=ADOConnection1;
ADOStoredProc1->Prepared = true;
ADOStoredProc1->ProcedureName = "backupdb;1";
ADOStoredProc1->Parameters->ParamByName("@dbName")->Value = "master"; // 為要備份的資料庫名稱
ADOStoredProc1->Parameters->ParamByName("@directory")->Value = path+" \\ master" + daStr; // 此處請注意因Blog關係,請將雙引號中的空格刪除,原程式中沒有空格,若不刪除空格可能造成備份檔案路徑不正確。
ADOStoredProc1->ExecProc();
Application->MessageBox("備份完成", "提示", MB_OK + MB_ICONINFORMATION);
this->Close();
}
catch(...){
Application->MessageBox("備份出錯,請重新再來", "警告", MB_OK + MB_ICONWARNING);
return;
}
}
//---------------------------------------------------------------------------
沒有留言:
張貼留言