function pRestoreDataBase(DataBaseName, BackupFileName : String) : Boolean;
    var
    TempTab : TADOQuery;
    begin
    TempTab := TADOQuery.Create(nil);
      if FileExists(BackupFileName)=false then
        begin
         Result:=false;
         exit;
        end;
     try
     TempTab.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master';
     TempTab.CommandTimeout:=120;
      TempTab.SQL.Add('USE master');
      TempTab.SQL.Add('alter database '+DataBaseName+' set offline WITH ROLLBACK IMMEDIATE');
      //TempTab.SQL.Add('exec  killspid  '+DataBaseName+'');
     TempTab.SQL.Add('RESTORE DATABASE '+DataBaseName+' FROM DISK = '''+BackupFileName+''' with recovery');
     TempTab.SQL.Add('alter database '+DataBaseName+' set online with rollback immediate');
        TempTab.ExecSQL;
      TempTab.Free;
      Result := True;
    except
    TempTab.Free;
    Result := False;
    end;
  end;
数据还原的时候程序向死掉一样,没有响应,不能达到还原的目的,望哪个大哥解答一下,分不是问题

解决方案 »

  1.   

    如何监视,我在进行还原操作的时候等上两分钟也是没反应,程序仍旧是未响应TempTab.SQL.Add('USE  master');  
    TempTab.SQL.Add('alter  database  '+DataBaseName+'  set  offline  WITH  ROLLBACK  IMMEDIATE');  
               
    TempTab.SQL.Add('RESTORE  DATABASE  '+DataBaseName+'  FROM  DISK  =  '''+BackupFileName+'''  with  recovery');  
    TempTab.SQL.Add('alter  database  '+DataBaseName+'  set  online  with  rollback  immediate');  
    如果我把上述语句转换成SQL语句在查询分析器里执行,如果我同时打开程序,数据还原同样等上很长时间都没反应,我怀疑是在关闭数据连结的时候出问题,哪个大人指点一下,小弟不胜感激!!!!!!111
      

  2.   

    你先把ADOCONNECTION.CONNECTED=FALSE,试试.
      

  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;