var
  wl: string;
begin
  wl := 'use master restore database Exam from disk=';
  with XTWHDataM do
  begin
    ExamADOC.Connected := false;
    wl := wl + '''' + DirE.Text + '''' + 'with replace';
    adoc.execute(wl);  //ADOc是另一个ADOConnection
    ExamADOC.Connected := true;
  end;
  MessageBox(Handle,'数据恢复完毕!','提示信息...',MB_ICONINFORMATION);
  HuiFuForm.Close;
end;按下恢复按钮后,程序几停止响应了,过了10几秒钟后才弹出数据恢复完毕的对话匡可是SQL Server中的数据却一点也没有被恢复,这是怎么回是????

解决方案 »

  1.   

    把wl改为wl := wl+quotedstr(DirE.Text)+' with replace',为什么你要用两个连接?一个不行吗?
      

  2.   

    你这个问题我遇到过,用两个adoconnection连接,
    1.ADOConnection1 连接你的业务数据库。
    2. ADOConnection2 连接 MASTER 数据库。
    3. ADOCommand1.Connection := ADOConnection2;
    这里是通过在Master中执行SET OFFLINE的方法将指定的数据库关闭,同时回滚
    当中的事务,使连接断开,然后进行备份,完成后再将连接打开。具体代码如下假设你的数据库名为: DataBaseName
    Button.OnClick:
    begin
      ADOConnection1.Connected := False;
      ADOCommand1.CommandText := 'BACKUP DATABASE DataBaseName TO DISK = ' + #39 + 'C:\KKK.BAK' + #39;
      ADOCommand1.Execute;
      ADOCommand1.CommandText := 'ALTER DATABASE DataBaseName SET OFFLINE WITH ROLLBACK IMMEDIATE';
      ADOCommand1.Execute;
      ADOCommand1.CommandText := 'RESTORE DATABASE DataBaseName FROM DISK = ' + #39 + 'C:\KKK.BAK' + #39;
      ADOCommand1.Execute;
      ADOCommand1.CommandText := 'ALTER DATABASE DataBaseName SET ONLINE WITH ROLLBACK IMMEDIATE';
      ADOCommand1.Execute;
      ADOConnection1.Connected := True;
      ADOTable1.Active := true;
    end;
      

  3.   

    我试过了,可是运行时,告诉我SET关键字错误,不知道怎么回事??
      

  4.   

    sql server中建存储过程,输入参数@path_info为文件名及全路径
    备份
    CREATE PROCEDURE myproc_back 
    @path_info varchar(100)
    AS
    backup database mydatabase to disk=@path_info
    GO
    恢复
    CREATE PROCEDURE myproc_rest
    @path_info varchar(100)
    AS
    restore database mydatabase from disk=@path_info
    GO
    程序中运行存储过程就是了
    if savedialog1.execute then
    begin
        ......
        query1.sql.add('exec myproc_back '''+savedialog1.filename+'''');
        query1.execsql;
    end;