为什么我用ADOConnection连接数据库。connected为true.再为false.后
备份sql server数据库总告诉我数据库有人占用。ADOConnection设置一样。
这是为什么呀?那位大侠指点一下

解决方案 »

  1.   

    没有问题呀,试一下:
          SQL.Clear;
          SQL.Add(' exec sp_dropdevice ''Lower_bak''');
          SQL.Add(' if not exists (select 1 from master..sysdevices where name=''Lower_bak'')');
          SQL.Add(' EXEC sp_addumpdevice ''disk'', ''Lower_bak'',''e:\lower''');
          SQL.Add(' USE Lower BACKUP DATABASE Lower to Lower_bak with INIT');
          ExecSQL;
      

  2.   

    你这样是没有用的。除非 
    adoconnection.commected:=false;
    adoconnection.free
      

  3.   

    有错,改后
          SQL.Clear;
          SQL.Add(' if exists (select 1 from master..sysdevices where name=''Lower_bak'')');
          SQL.Add(' exec sp_dropdevice ''Lower_bak''');
          SQL.Add(' EXEC sp_addumpdevice ''disk'', ''Lower_bak'',''e:\lower''');
          SQL.Add(' USE Lower BACKUP DATABASE Lower to Lower_bak with INIT');
          ExecSQL;
      

  4.   

    同意My_first(海浪)的意见。
      

  5.   

    天天向上,好好学习!
    ================================================================
    GO!
    GO!
    GO!
      

  6.   

    只有adoconnection.connected:=false;不行在恢复前,最好free掉adoconnection,然后再create一个。
      

  7.   

    你要用一个adoconnection来连接master数据库,还要把你原来连接业务数据库的adoconnection断掉
    1. ADOConnection1 连接你的业务数据库。
    2. ADOConnection2 连接 MASTER 数据库。
    3. ADOCommand1.Connection := ADOConnection2;
    假设你的数据库名为: 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;