备份的文件已生成,以下是恢复的函数,运行没有提示错误,但数据库没有变化.procedure TManagerForm.SpeedButton2Click(Sender: TObject);
begin    RestoreDialog.filter:='备份文件(*.dat)*.dat';
    RestoreDialog.defaultext:='dat';
    RestoreDialog.filename:='';if MessageDlg('恢复后需重新登录,是否恢复?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
SpeedButton2.Enabled:=False;
try
DM.ADOConnection.Connected:=false;
with DM.BakADOQuery do
    begin
    close;
    SQL.clear;
    SQL.Add('use master');
    if RestoreDialog.Execute then
    begin
    SQL.Add('restore database Library from disk= '''+RestoreDialog.FileName+''' with replace');
    ExecSQL;
    MessageDlg('数据库恢复成功!',mtInformation,[mbOK],0);
    end;
    end;
Except
MessageDlg('数据库恢复失败!',mtInformation,[mbOK],0);
end;
DM.ADOConnection.Connected:=True;
SpeedButton2.Enabled:=True;
end;
end;

解决方案 »

  1.   

    两次sql.add之间加一个execsql;
      

  2.   

    我以前也出现跟你一样的情况,不知为什么
    你试着另放一个ADOConnection连向master,然后把原来的AC关了看看我原来干脆把恢复程序写成了一个单独的程序才好使
      

  3.   

    我觉得把它改成过程,交给sql做算了
      

  4.   

    或者简单点:
    RESTORE DATABASE master
       FROM TAPE = '\\.\Tape0'
    GO
      

  5.   

    我试过了,你的没反映是因为你的sql语句只执行到'use master'就停了
    如果,你在'use master'之后execsql一下,再sql.clear一下,再
    SQL.Add('restore database Library from disk= '''+RestoreDialog.FileName+''' with replace');
        ExecSQL;
        就ok了
      

  6.   

    真实错误是:未能获得对数据库的排他访问权,可是我已用如下语句对该数据库的连接断开了
    DM.ADOConnection.Connected:=false;
    这怎么解决呢?
    注:DM.BakADOQuery 是基于master数据库的.
      

  7.   

    先drop database...
    再create database...
    每一部都是基于master库,这是必然的,否则总是提示正在使用
    反正我的经验是如此