用SQL语句写了恢复数据库备份的代码,同时关掉了其他ADO控件的连接(除用于执行SQL的控件外)
StrSQL := 'restore database guard from disk='''+'h:\ws\guard.bak' +''''+'with replace';
  GuaDataModule.ADOQuery1.Connection := GuaDataModule.ADOConnection1 ;
  GuaDataModule.ADOConnection.Close;
  GuaDataModule.ADOQuery1.SQL.Clear ;
  GuaDataModule.ADOQuery1.SQL.Add(StrSQL);
  GuaDataModule.ADOQuery1.ExecSQL ;
  GuaDataModule.ADOConnection.Open;
可还是出现的问题,说‘the database is in use'的错误,为什么啊?
错在什么地方?

解决方案 »

  1.   

    我也遇到过,在SQL SERVER 里面执行SQL语句的时候就这样
    搞不定,帮你UP
      

  2.   

    是不是应该先执行 GuaDataModule.ADOConnection.Open 啊
      

  3.   

    不是的,GuaDataModule.ADOConnection.Close;这句话是关闭打开数据库的其他操作的通道,避免被使用,怎么没人回答我的问题啊
      

  4.   

    ADOConnection1打开时连接 master表,然后
    ADOConnection1.Execute ('restore database guard from disk='''+'h:\ws\guard.bak' +''''+'with replace';肯定没问题,我经常这样用!
      

  5.   

    如果在查询分析器里执行
    uses master
    restore database name from disk='c:\name.bak' with replaceADOConnection1打开时连接 master表用adoquery连接到ADOConnection1
    with adoquery do
    begin
      active:=false;
      Connection := ADOConnection1;
      sql.add('restore database name from disk='+'+''''+'c:\name.bak' +''''+with replace')
      execsql;
    end;