if OpenDialog1.Execute then
  begin
    //DataBase1.Close;
    DataBase1.Connected := False;
    DataBase1.Params.Clear;
    DataBase1.AliasName := 'master';
    DataBase1.DatabaseName := 'master';
    DataBase1.Params.Add('User Name=sa');
    DataBase1.Connected := True;
    Query1.DatabaseName := 'master';
    try
      with Query1 do
      begin
        Close;
        UnPrePare;
        SQL.Clear;
        SQL.Add('Restore DataBase tsg from disk = :disk');
        Params[0].AsString := OpenDialog1.FileName;
        PrePare;
        ExecSQL;
      end;
    except
      ShowMessage('恢复失败');
      Exit;
    end;
  end;
  Application.MessageBox('恭喜您,数据恢复成功','提示',MB_OK + MB_ICONINFORMATION);
end;
你将BDE换成ADO就可以了;

解决方案 »

  1.   

    另外用一个adoconnection连接master数据库,将原来的连接断开。然后使用Query连接这个Adoconnection使用Sql语句恢复
    if RestorDialog.Execute then
           begin
             with TAdoQuery.Create(nil) do
             try
                close;
                sql.Clear ;
                FrmSystemDM.ADOConnection1.Connected := False;
                Connection :=FrmSystemDM.ADOConnection2;
                FrmSystemDM.ADOConnection2.Connected := True;
                SQL.add(Format('Restore  DATABASE DHPrint From DISK=''%s'' with Replace', [RestorDialog.FileName]));
                ExecSQL ;
             finally
                FrmSystemDM.ADOConnection1.Connected := True;
                FrmSystemDM.ADOConnection2.Connected := False;
                free;
             end;
           end;
          end;
      

  2.   

    把SQL Server的服务停止,再试一下就能成功
      

  3.   

    我也有过这样的问题
    ---最后发现问题所在:---
    备份完后只要重新打开数据源,恢复就不能进行了。(数据库已被使用)
    一般重新运行程序就好了。
    但如果在运行期database备份完毕后不打开的话就可以恢复了。
    实在不行把恢复单独做出来吧(一个单独的程序);
      

  4.   


    TDataBase  有 CloseDataSEt  的用法,如果AdoConnection也有的话,就可以在恢复前调用