我备份时正常.还原时提示成功,但是数据却没有变.但手工在<SQL Server企业管理器>中还原时就正常.这是为什么?
备份:
ADOQBak.SQL.Add('use master');
ADOQBak.SQL.Add('Backup DataBase sms to Disk='+ ''''+OutputFile+'''');还原:1
ADOQBak.SQL.Add('use master');
ADOQBak.SQL.Add('Restore DataBase sms from Disk='+ ''''+InputFile+'''');
还原:2
ADOQBak.SQL.Add('use master');
ADOQBak.SQL.Add('Restore DataBase sms from Tape='+ ''''+InputFile+'''');

解决方案 »

  1.   

    ADOQBak.SQL.Add('use master');
    ADOQBak.SQL.Add('Restore DataBase sms from Tape='+ ''''+InputFile+''''+'with replace');
     也不行
      

  2.   

    用这个存储过程来完成你的工作吧备份与恢复数据库的存储过程create   PROCEDURE  GY_DBBak  
              @bakequip    int,         --  备份设备:磁盘&磁带  
              @bakpath     varchar(50), --  带全路径的备份文件名  
              @baktype     int,         --  完全备份&增量备份  
              @baklog      int,         --  ‘0’备份日志  
              @bakdb       int,         --  ‘0’备份数据库  
              @kind  varchar(7),        --备份还是恢复  
              
      @retmsg  varchar(20)  output     --返回信息  
    AS  
       DECLARE  @DevName_data    varchar(50)  
       DECLARE  @DevName_log   varchar(50)
       declare @db_path varchar(100)
       declare @log_path varchar(100)
           
       DECLARE  @RC INT     SELECT    @db_path    =  @bakpath    +  '.dat'  
    SELECT    @log_path   =  @bakpath    +  'log.dat'  
            SELECT    @RC=0   DBCC  CHECKDB(Northwind)  
    /***********************************************************
    ** CREATE BACKUP AND RESTORE DEVICES
    ************************************************************/
    IF @RC=0
       BEGIN

        EXEC sp_addumpdevice 'disk', @DevName_data,@db_path

    exec sp_addumpdevice 'disk', @DevName_log,@log_path
        select @rc=@@error
    IF @RC<>0
    begin
    EXEC SP_DropDevice @Devname_data
    exec sp_dropdevice @devname_log
    SELECT @RC=-1000
    return @rc
    end
      END

       IF  @kind='backup'  
       BEGIN  
           IF  @bakequip=0  
           BEGIN  
               IF  @baktype=0  
               BEGIN  
                   IF  @bakdb=0  
                   BEGIN    
                       BACKUP  DATABASE  Northwind  TO  DISK=@Devname_data   
                       WITH  INIT  
                   END  
                   IF  @baklog=0  
                   BEGIN              
                       BACKUP  LOG  Northwind  WITH  NO_LOG              
                       BACKUP  LOG  Northwind  TO  DISK=@DevName_log 
                       WITH  INIT,NO_TRUNCATE  
                   END  
               END  
               ELSE  BEGIN  
                   IF  @bakdb=0  
                   BEGIN  
                       BACKUP  DATABASE  Northwind  TO  DISK=@DevName_data
                       WITH  NOINIT  
                   END  
                   IF  @baklog=0  
                   BEGIN  
                       BACKUP  LOG  Northwind  WITH  NO_LOG              
                       BACKUP  LOG  Northwind  TO  DISK=@DevName_log 
                       WITH  NOINIT,NO_TRUNCATE  
                   END  
               END          
           END  
           SELECT  @retmsg='数据库备份成功!'  
       END  
     
       IF  @kind='restore'      
       BEGIN  
           RESTORE  DATABASE  Northwind  FROM  DISK=  @DevName_data WITH  REPLACE  
           SELECT  @retmsg='恢复数据库成功!'  
       END  
     
       RETURN  0  
      

  3.   

    ADOQBak.SQL.text :='use master';
    ADOQBak.execsql;
    ADOQBak.SQL.text :='Restore DataBase sms from Tape='+ ''''+InputFile+''''+'with replace';
    adoqbak.execsql;
    够简单了吧
      

  4.   

    To:: newyj(吴刚vs西西弗)
    我试了.结果还是一样.提示还原成功!,但数据库还是不变.
      

  5.   

    newyj(吴刚vs西西弗)的方法一定没问题,ADOQBak.SQL.text :='use master';
    ADOQBak.execsql;
    ADOQBak.SQL.text :='Restore DataBase sms from disk='+ ''''+InputFile+''''+'with replace';
    adoqbak.execsql;InputFile为'c:\sms.bak'
      

  6.   

    不行.
    我写了一个存储过程.结果总是提示'数据库正在使用'
    CREATE Procedure dbo.SP_ResSaveSMS
       @InputPath varchar(200)
    as
    Restore DataBase Savesms from Disk=@InputPath with replace
    GO 程序代码:
    ADOConnSave.Connected:=false;  //源来是连接 sms数据库 的
    ADOSPRstore.Connection:=ADOConnSource;  //连接的是Savesms数据库
    ADOSPRstore.ProcedureName:='SP_ResSaveSMS';
    ADOSPRstore.Parameters.CreateParameter('@InputPath',ftString,pdInput,200,InputFile);
    ADOSPRstore.Prepared:=true;
    ADOSPRstore.ExecProc;