我的程序有ADOConnection1和ADOCN_back两个ADOConnection组件,ADOConnection1用来做正常的数据读写,ADOCN_back和一个ADOCommand组件cback用作数据备份,语句如下:
main.ADOConnection1.Close;    main.ADOConnection1.Connected:=False;    main.cback.CommandText:= 'restore database article from disk=''' + Fname + '''' + ' with replace'; //恢复数据命令语句        try
          //执行恢复过程          main.cback.Execute;        except          showmessage('数据库正在被使用!请确定已关闭其它使用该数据库程序!');          Timer1.Enabled:=False;          ProgressBar1.Position:=ProgressBar1.min;          showmessage('    恢复失败!');
        end;总是恢复失败,请高手指点原因

解决方案 »

  1.   

    在SQL语句前加USE MASTER试试看啊
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    begin
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('BACKUP DATABASE northwind TO DISK = N''D:\b.bak''');
    adoquery1.ExecSQL;end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.sql.Add('RESTORE DATABASE pubs FROM DISK =''d:\a.bak ''');
    adoquery1.ExecSQL;
    end;
    h上央就是备份和还源的
    出错有可能因为还源的时候ADOQUERY1连接的PUBS表已经删除掉。所以报登录不了的错误。
    为了不出错应动态指定其数据源。。即打开另一个库来执行还源的这条语句。
    还源的时候还要注意SQL SERVER里有没有被还源的库
      

  3.   

    还原数据库之前应该断开所有用户与之建立的连接。
    use master
    goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_killspid]
    GOcreate proc p_killspid
    @dbname sysname --要关闭进程的数据库名
    as  
    declare @s nvarchar(1000)
    declare tb cursor for local
    select s='kill '+cast(spid as varchar)
    from master..sysprocesses 
    where dbid=db_id(@dbname)open tb 
    fetch next from tb into @s
    while @@fetch_status=0
    begin
    exec(@s)
    fetch next from tb into @s
    end
    close tb
    deallocate tb
    go--用法  
    exec p_killspid  '客户资料'关于了所有连接后,在恢复数据库。
    use master
    go
    restore database '客户资料' from disk = 'd:\a.bak'
    go你试试吧!
      

  4.   

    declare tb cursor for local ....local  是啥东东???
      

  5.   

    declare tb cursor for local ....local  是啥东东???提示local附近有语法错误呀
      

  6.   

    用这个试试看
    数据库恢复问题:
    但你的数据库有用户连接的时候是不能恢复的,它在提示数据库再使用 你用
    query1.sql.clear;
    query1.sql.add('use master');
    query1.sql.add('exec p_killspid ''数据库名''');
    query1.execsql;
    query1.sql.clear;
    query1.sql.add('RESTORE DATABASE tour from disk=''d:\back1.bak''');
    query1.execsql;
    就可以了;如果不行的话,先把原来的数据模块释放掉再恢复数据库应该可以了,注意:你的ADOCommand不能放在数据模块上
      

  7.   

    检查sql在查询分析器中执行的怎么样