我貼代碼出來吧 呵呵 自己看就明白怎麼回事了 procedure TDB_frm.SB_bakClick(Sender: TObject); var BackupToFile,tempstr: string; adobackup:TAdocommand; begin BackupToFile := self.EdtBackUpPath.Text ; if Trim(EdtBackUpPath.Text) = '' then begin MessageDlg('未設定備份的目的資料庫!', mtError, [mbOK], 0); Exit; end else begin tempstr:= copy(BackupToFile,length(BackupToFile)-3,4); if uppercase(tempstr)<>'.BAK' then backuptofile :=self.EdtBackUpPath.Text+'.bak' end;if self.RB_bak.Checked then //備份 begin if FileExists(BackupToFile) then begin if MessageDlg(BackupToFile + '已經存在,是否要覆蓋該檔案?', mtWarning, [mbYes,mbCancel], 0) = MrCancel then Exit; end; adobackup:=TAdocommand.Create(application); adobackup.ConnectionString:=' Provider=SQLOLEDB.1;'+'Persist Security Info=False;User ID='''+conninfo.username+''';Password='''+conninfo.userpassword+''';'+ 'Data Source='''+conninfo.servername+''''; adobackup.CommandText:='backup database '+conninfo.database+' to disk = '+ ''''+BackupToFile+''''; try adobackup.Execute; adobackup.Free; if Application.MessageBox( '備份成功! ','提示',64)=IDOK then Close; except Application.MessageBox('備份失敗!','提示',64); adobackup.Free; exit; end; end; end; procedure TDB_frm.SB_restoreClick(Sender: TObject); var RestoreFromFile: string; adorestore:TAdocommand; begin if Trim(self.edtRestorePath.Text) = '' then begin MessageDlg('未設定還原的目的資料庫!', mtError, [mbOK], 0); Exit; end; if self.RB_restore.Checked=true then begin RestoreFromFile := self.edtRestorePath.Text; if not FileExists(RestoreFromFile) then begin MessageDlg('找不到用於還原資料庫的備份檔案!', mtError, [mbOK], 0); Exit; end; end; if application.MessageBox('此操作將使上次備份以來的所有資料丟失,是否繼續?','恢複資料',33)=IDCANCEL then exit; dm_frm.Free; adorestore:=TAdocommand.Create(application); adorestore.ConnectionString:=' Provider=SQLOLEDB.1;'+'Persist Security Info=False;User ID='''+conninfo.username+''';Password='''+conninfo.userpassword+''';'+ 'Data Source='''+conninfo.servername+''''; adorestore.CommandText:='restore database '+conninfo.database+' from disk='''+RestoreFromFile+''' with replace'; try adorestore.Execute; adorestore.Free; if Application.MessageBox( '恢複成功! 現在需要重新登陸軟體,請按“確定” ','提示',64)=IDOK then Close; Application.Terminate; except Application.MessageBox('恢複失敗!請斷開與該資料庫的所有串連!','提示',64); adorestore.Free; exit; end; end; procedure TDB_frm.RB_bakClick(Sender: TObject); begin self.edtRestorePath.Clear; self.EdtBackUpPath.Enabled := true; self.EdtBackUpPath.ReadOnly :=false; self.edtRestorePath.Enabled :=false; self.edtRestorePath.ReadOnly:=true; self.SB_bak.Enabled:= true; self.SB_bak_P.Enabled:= true; self.SB_restore.Enabled:= false; self.SB_restore_P.Enabled:= false; end; procedure TDB_frm.RB_restoreClick(Sender: TObject); begin self.EdtBackUpPath.Clear; self.EdtBackUpPath.Enabled :=false; self.EdtBackUpPath.ReadOnly :=true; self.edtRestorePath.Enabled :=true; self.edtRestorePath.ReadOnly:=false; self.SB_bak.Enabled:= false; self.SB_bak_P.Enabled:= false; self.SB_restore.Enabled:= true; self.SB_restore_P.Enabled:= true; end; procedure TDB_frm.FormShow(Sender: TObject); begin self.RB_bak.Checked := true; self.EdtBackUpPath.Clear; self.edtRestorePath.Clear; end; procedure TDB_frm.SB_bak_PClick(Sender: TObject); begin self.SaveDialog1.Filter:='備份檔案(*.bak)|*.bak'; if self.SaveDialog1.Execute then self.EdtBackUpPath.Text:=self.SaveDialog1.FileName; end; procedure TDB_frm.SB_restore_PClick(Sender: TObject); begin OpenDialog1.filter:='備份檔案(*.bak)|*.bak' ; if self.OpenDialog1.Execute then self.edtRestorePath.Text:=self.OpenDialog1.FileName; end; end. 備份和恢複SQL SERVER 資料庫 恢複資料庫: 關鍵字:Alter Database 被恢複的資料庫名 Set Offline with Rollback immediate; restore database 被恢複的資料庫名 from disk = '備份檔案路徑'; Alter Database 被恢複的資料庫名 Set OnLine With rollback Immediate; ///////////////////// string sql = "Alter Database db Set Offline with Rollback immediate;"; //db 是要備份的資料庫名 sql += "restore database db from disk = '" ; sql += Server.MapPath("").ToString() +"//"; sql += bakname + "'"; //bakname 是備份檔案名 sql += "Alter Database db Set OnLine With rollback Immediate;"; try { 串連 master 資料庫 ; 執行 sql 語句; Response.Write("<script language=javascript>alert('資料恢複成功!');</script>"); } catch(Exception ex) { Response.Write("<script language=javascript>alert('資料恢複失敗!');</script>"); this.Label2.Text = ex.ToString(); } 備份資料庫: 關鍵字:backup database 被備份的資料庫名 to disk ='備份檔案路徑'; ////////////////////// string sql = "backup database db to disk = '" + Server.MapPath("").ToString() +"//" + bakname //備份檔案名 + System.DateTime.Now.DayOfYear.ToString() + System.DateTime.Now.Millisecond.ToString() + ".bak'"; try { 串連 被備份的資料庫 ; 執行 sql 語句; Response.Write("<script language=javascript>alert('備份成功!');location='restore.aspx'</script>"); } catch(Exception ex) { Response.Write("<script language=javascript>alert('備份失敗!');</script>"); this.Label2.Text = ex.ToString(); } ---------------------------------------------- |