******不能备份数据库,代码如下,请指出是那里出现错误。*************
    Try
     //将ADOQuery的联结属性设为空
     dm.ADOQry_BakupData.Connection:=nil;
     //将联结数据库的ADOConneciton断掉
     dm.ADOConnection1.Connected:=False;
     dm.ADOConnection1.KeepConnection:=False;     //定义备份用的ADOConneciton联结属性
     dm.ADOConnBackup.ConnectionString:='Provider=SQLOLEDB.1;'
     +'Persist Security Info=False;User ID=sa;Initial Catalog=master;'
     +'Data Source='+ServerName+';Use Procedure for Prepare=1;'
     +' Auto Translate=True;Packet Size=4096;Workstation ID='+ServerName;
     //自己控制登陆,
     dm.ADOConnBackup.LoginPrompt:=False;
     dm.ADOConnBackup.Open('sa',Trim(Edit2.Text));
     dm.ADOConnBackup.DefaultDatabase:='master';
     //dm.ADOConnBackup.Connected:=True;     dm.ADOQuery1.Close;
     dm.ADOQuery1.sql.clear;
     dm.ADOQuery1.sql.add('Restore database [xxxx] from disk='''+backupPath+''' with replace');
     Try
       dm.ADOQuery1.Excesql;
       ShowHintInfo('本次恢复成功')
     Except
       ShowHintInfo('本次恢复失败');
     end;
    Finally
     dm.ADOQuery1.close;
     dm.ADOConnBackup.Connected:=False; 
     dm.ADOConnection1.Connected:=True;
     dm.ADOConnection1.KeepConnection:=False;
     dm.ADOQry_BakupData.Connection:=dm.ADOConnection1;
    end;//Try...Finally's end

解决方案 »

  1.   

    可以通过Adocommand恢复
    不用断开AdoConnnection
    用AdoCommand
    with AdoCommand1 do
    begin
        CommandText:='use Master';
        Execute;
        CommandText:='execute sp_helpdevice';
        Execute ;
        CommandText:='Restore database '+Db_name+' From disk='''+FileName+''' with  replace';
        Execute ;
        CommandText:='Use '+Db_name;
        Execute ;
    end;
      

  2.   

    1 dm.ADOConnBackup.Connected:=True;加上
    2 用sp_who或者select * from sysproccesses查看是否有其他用户在使用xxx数据库
    3 将使用xxx数据库的进程kill proccess
    4 然后再恢复