var
path:string;
N:integer;
begin
  dataForm.ADOConnection1.Close;
  dataForm.ADOConnection1.Connected:=false;
  messagebox(self.Handle,'请在恢复前将所有与该数据库连接的程序关闭,以免恢复失败','提示信息',mb_iconinformation);
  //opendialog1.Filter:='(*.bak)|(*.bak)';
  opendialog1.InitialDir:=extractfiledir(application.ExeName)+'\databack\';
  if opendialog1.Execute then
    path:=opendialog1.FileName;
    if path<>'' then
    if messagebox(self.Handle,'确定要恢复数据库吗?这样会覆盖现在的数据。','提示信息',mb_yesno+mb_iconquestion)=idyes then
    begin
    with dataForm.ADOBack do
    begin
     TRY
      try
        close;
        sql.Clear;
        sql.add('use Master Restore DataBase lwgl from disk='+''''+ Trim(path)+'''');
        ExecSQL();
        for N:=0 to 100 do
          progressbar1.Position:=N;
        messagebox(self.Handle,'数据恢复成功','提示信息',mb_iconinformation);
        Progressbar1.Position:=0;
      except
        messagebox(self.Handle,'数据恢复失败','提示信息',mb_iconinformation);
      end;
     Finally
      with dataForm.ADOBack do
      begin
        Close;
        SQL.Clear;
        SQL.Add('USE lwgl');
        ExecSQL;
      end;
     end;
    end;
  end;
end;

解决方案 »

  1.   

    你应该重新连接master数据库,然后恢复。
    然后再重新连接你的数据库/。
      

  2.   

    see备份EXEC sp_addumpdevice 'disk', 'eee', 'c:\eee.dat'
    BACKUP DATABASE DYJDGlSys TO eee
    还原RESTORE DATABASE DYJDGlSys  FROM eee
      

  3.   

    恢复数据库的时候不能在占有它的时候恢复他(你能把一个正在使用的文件重命名或者删除吗?一个道理),先连接master,恢复,然后连接该数据库
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if opendialog1.Execute then
    begin
    adoquery1.SQL.Text:='use master;'+
    'ALTER DATABASE mydatabase SET OFFLINE WITH ROLLBACK IMMEDIATE;'+ 
    'restore database mydatabase from disk='''+opendialog1.FileName+''';'+
    'ALTER DATABASE mydatabase SET ONLINE WITH ROLLBACK IMMEDIATE;use mydatabase';
    adoquery1.ExecSQL;
    application.MessageBox('恢复成功','提示',MB_OK);
    end;
    end;