我在DELPHI中连接数据库,实现数据库的备份与还原,在还原的时候,我是在当前已经存在的数据库上进行备份的,那这个应该怎么做呢,是不是首先把数据库删掉,然后再还原呢,但是这好象是在WINDOWS下面把WINDOW删掉,那该怎么做呢?????

解决方案 »

  1.   

    看你是用什么数据库了,access\mysql\ms server....1.一般来说,备份是没有问题了,要吧在线备份2.还原的话,最好关闭程序中相关的数据连接,不在使用数据库,再进行还原.
      桌面级数据库(如access),直接Copy文件到可以了
      
      像ms sqlserver,可以使用restore database 这个sql语句;
      

  2.   

    还是不是很明白,我写了个测试的程序,把那个ADOCONNECT的属性设置ADOConnection1.Connected:=false;
    这样应该就取消了与数据库之间的连接嘛,但是还是不行,返回的是:
    因为数据库正在使用,所以未能获得对数据库的排它访问权。
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    with  AdoCommand1  do
    begin
           CommandText:='use  Master';
           Execute;
           CommandText:='execute  KillSPID';--自己写的存储过程
           Execute  ;
           CommandText:='Restore  database  Test  From  disk='''+'E:\123'+'''  with    replace';
           Execute  ;
           CommandText:='Use Test ';
           Execute  ;
    end;end; ****************************存储过程KILLSPID--该过程放在Master中Create Proc KillSPID
    As
    DECLARE ProcessID CURSOR
       FOR
       Select Spid From Master..SysProcesses Where Dbid=db_id('Test') 
    OPEN ProcessID
    DECLARE @Spid sysname
    FETCH NEXT FROM ProcessID INTO @Spid
    WHILE (@@FETCH_STATUS <> -1)
    BEGIN   EXEC ('Kill ' + @Spid)
       FETCH NEXT FROM ProcessID INTO @Spid
    END
    CLOSE  ProcessID
    DEALLOCATE ProcessID  还原数据库时注意事项
    1.恢复时一定会连接Master数据库
    2.用应用程序恢复时,需要用KILLSPID来杀死连接在该数据库上的进程
    3.KILLSPID一定在放在Master数据库中,否则会出现'不能用 KILL 来取消您自己的进程。'
      

  4.   

    只有这种办法吗?我想的是如果我们能把ADOConnection1这个连接关闭,我再建一个连接到master上面,再执行SQL语句,那样可行不,就是说有没有一种机制把ADOConnection1与数据库相分开就行了
    请高手分析一下,,,,,