procedure Tbeifenhuanyuan.cxButton3Click(Sender: TObject);
 var sqlstr:string;
   adoquery1.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=kehu';
   sqlstr :=' RESTORE DATABASE ' +cxtextedit1.text ;
   sqlstr :=sqlstr+' FROM disk = '+QuotedStr(cxtextedit3.text);
   adoquery1.Close;
   adoquery1.SQL.Clear ;
   adoquery1.SQL.add(sqlstr);
   adoquery1.ExecSQL ;
   showmessage(数据还原成功¦');
   end;
此段代码,在还原过程中,出现数据库正在使用,你无法获得数据库的排它访问权.如果,还原其它数据库的时候,是可以还原的.不知此问题如何解决,如果在restore database前加上use master 则出现数据库还原成功,但删除的数据并没有恢复.不知是什么原因?
 

解决方案 »

  1.   

    adoquery1.SQL.add('use master');//加这句
    adoquery1.SQL.add(sqlstr);
      

  2.   


    procedure TForm5.Button10Click(Sender: TObject);
    begin
    if opendialog1.Execute then
    BackupFile.Text:=opendialog1.FileName;
    end;procedure TForm5.Button11Click(Sender: TObject);
    begin
    if not FileExists(BackupFile.Text) then
    begin
    ShowMessage('未指定数据备份的文件,请重新选择备份的文件!');
    Exit;
    end;try
    adoconnection1.Connected:=false;
    if not checkbox1.Checked then
    adoconnection1.ConnectionString:='Provider=SQLOLEDB.1;Password='+password.text+';Persist Security Info=True;User ID='+username.text+';Initial Catalog=master;Data Source='+ServerName.Text
    else
    adoconnection1.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source='+ServerName.Text;
    adoconnection1.Connected:=true;
    if KillActiveConnection then
    begin
    ADOConnection1.Execute('restore database '+DBName.Text+' from disk ='+''''+BackupFile.Text+''' WITH FILE = 1,NOUNLOAD , STATS = 10, RECOVERY ');
    ShowMessage('恢复成功!');
    end;
    adoconnection1.Connected:=False;
    except
    on e:exception do
    begin
    ShowMessage('恢复数据库时发生错误!'+#13+e.Message);
    end;
    end;
    end;function TForm5.KillActiveConnection: Boolean;
    begin
    Result:=False;
    with ADOQuery1 do
    begin
    Close;
    SQL.Text:='select spid from master..sysprocesses where dbid=db_id('''+DBName.Text+''')';
    Open;
    if recordcount>0 then
    begin
    if Application.MessageBox('目前数据库还存在活动连接,强行恢复数据库将使这些活动连接丢失,是否强行恢复数据库?','警告', MB_ICONWARNING+MB_YESNO+MB_DEFBUTTON2)=IDYES then
    begin
    First;
    while not Eof do
    begin
    ADOConnection1.Execute('kill '+Fields[0].AsString);
    Next;
    end;
    end
    else
    Exit;
    end;
    end;
    Result:=True;
    end;
      

  3.   

    try
          adocmd.CommandText:='use master';
          adocmd.Execute;
          adocmd.CommandText:=' alter database Dzyl set offline with rollback immediate';
          adocmd.Execute;
          adocmd.CommandText:='restore database Dzyl from disk= '''+edtName.Text+''' with recovery ';
          adocmd.Execute;
          adocmd.CommandText:=' alter database Dzyl set online with rollback immediate';
          adocmd.Execute;
           showmessage('数据库恢复成功!');
          application.Terminate;
        except
        on e:exception do
          begin
            showmessage('数据库恢复失败!'+e.Message);
          end;
        end;