delphi操作sql数据库的备份和强制还原
procedure TFrmMain.NSystBackupClick(Sender: TObject); var strFile:string; begin // 数据库备份 SaveDlgData.Filter:='All files (*.*)|*.*'; SaveDlgData.FileName:='DataBack'+DateToStr(now);
if SaveDlgData.Execute then begin strFile:=SaveDlgData.FileName;
StatusBar1.Panels[1].Text:='正在备份数据库...'; DataModuleMain.ADOQBack.Close; DataModuleMain.ADOQBack.SQL.Clear; DataModuleMain.ADOQBack.SQL.Add('backup database DangerWaste to disk='''+strFile+''' '); try DataModuleMain.ADOQBack.ExecSQL;
Application.MessageBox(pchar('数据库已经备份到'+strFile+'!'),'提示',MB_OK+MB_ICONINFORMATION ); //write log DataModuleMain.AddLog(currentUser.Name,'备份数据库到'+strFile,DateTimeTostr(now)); StatusBar1.Panels[1].Text:=''; except Application.MessageBox('文件写入错误!','错误',MB_OK+MB_ICONERROR ); end;
end; end;
procedure TFrmMain.NSysRestoreClick(Sender: TObject); //数据库还原 var strFile:string; begin if OpenDlgRestore.Execute then begin strFile:=OpenDlgRestore.FileName; if messagedlg('是否确定还原',mtconfirmation,[mbyes,mbno],0)=mryes then begin
StatusBar1.Panels[1].Text:='正在恢复数据库...'; try with DataModuleMain do begin ADOConnMain.Close; ADOConnectRestore.Open();//主义这个connection连接的是master数据库 ADOQRestore.Close; ADOQRestore.SQL.Clear; ADOQRestore.SQL.Add('ALTER DATABASE DangerWaste SET OFFLINE WITH ROLLBACK IMMEDIATE'); ADOQRestore.ExecSQL; ADOQRestore.Close; ADOQRestore.SQL.Clear; ADOQRestore.SQL.Add('restore database DangerWaste From disk='''+strFile+''' '); ADOQRestore.ExecSQL; ADOConnectRestore.Close; ADOConnMain.Connected:=true; end;
Application.MessageBox(pchar('数据库恢复成功!'),'提示',MB_OK+MB_ICONINFORMATION );
DataModuleMain.AddLog(currentUser.Name,'还原数据库从'+strFile,DateTimeTostr(now)); StatusBar1.Panels[1].Text:=''; except Application.MessageBox('数据库联接错误','错误',MB_OK+MB_ICONERROR); end; end; end; end;
|