怎样实现在应用程序中实现数据库的的备份和还原功能?谢谢!

解决方案 »

  1.   

    我使用的sql-server数据库,谢谢大家!
      

  2.   

    这是我的代码
    //备份
    procedure TDBBackupForm.XP_Button2Click(Sender: TObject);
    begin
      pgbar.Max:=100;
      pgbar.Min:=0;
      pgbar.Position:=0;
      pgbar.Step:=20;
      With SaveDialog1 do
      begin
        filename:='DB'+FormatDateTime('yy_MM_dd_hh_mm_ss',Now);
        options:=[ofhidereadonly,offilemustexist,ofpathmustexist];
        if execute then
        begin
          label1.Caption:='正在备份中...';
          DataModule1.ADOConnection1.Close;
          TmpStr:=  ExtractFileName(filename);
          strlen:=  Length(TmpStr);
          DevName:= Copy(TmpStr,1,strlen-4);
          begin
          try
            ADOCommand1.CommandText:='use Master';
            pgbar.StepIt;
            ADOCommand1.Execute;
            adocommand1.CommandText:='execute sp_helpdevice';
            pgbar.StepIt;
            adocommand1.Execute ;
            pgbar.stepit;
            adocommand1.CommandText:='backup database '+InitDB+' to disk='''+filename+''' with init';
            pgbar.StepIt;
            adocommand1.Execute ;
            adocommand1.CommandText:='Use '+InitDB;
            pgbar.StepIt;
            adocommand1.Execute ;
            Self.Hide;
            ShowMessage('数据库已经成功备份到 '+filename+'!');
            Try
              DataModule1.ADOConnection1.Connected:=  True;
            Except
              ShowMessage('无法重新接连数据库!,系统即将退出!');
              Application.Terminate;
            End;
          self.Close;
          Except
            On Exception do
              if DataModule1.ADOConnection1.InTransaction then
                DataModule1.ADOConnection1.RollbackTrans;
          End;
          End;
        end;
      end;end;
    procedure TDBBackupForm.FormActivate(Sender: TObject);
    begin
    //从INI文件中读出数据库的相关信息
      SYSINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+'DB.INI');
      try
        InitDB := SYSINI.ReadString('Database', 'InitDB', '');
      finally
        SYSINI.Free;
      end;end;
    //还原数据库
    procedure TDBBackupForm.XP_Button3Click(Sender: TObject);
    begin
      pgbar.Max:=100;
      pgbar.Min:=0;
      pgbar.Position:=0;
      pgbar.Step:=20;
      With OpenDialog1 do
      begin
        filename:='';
        options:=[ofhidereadonly,offilemustexist,ofpathmustexist];
        if execute then
        begin
          label1.Caption:='正在还原中...';
          DataModule1.ADOConnection1.Close;
          TmpStr:=  ExtractFileName(filename);
          strlen:=  Length(TmpStr);
          DevName:= Copy(TmpStr,1,strlen-4);
          pgbar.StepIt;
          try
            ADOCommand1.CommandText:='use Master';
            ADOCommand1.Execute;
            pgbar.StepIt;
            adocommand1.CommandText:='execute sp_helpdevice';
            adocommand1.Execute ;
            pgbar.stepit;
            adocommand1.CommandText:='Restore database '+InitDB+' From disk='''+filename+''' with replace';
            pgbar.StepIt;
            adocommand1.Execute ;
            adocommand1.CommandText:='Use '+InitDB;
            pgbar.StepIt;
            adocommand1.Execute ;
            Self.Hide;
            ShowMessage('数据库已经成功还原到数据库 '+InitDB+'!');
            Try
              DataModule1.ADOConnection1.Connected:=  True;
            Except
              ShowMessage('无法重新接连数据库!,系统即将退出!');
              Application.Terminate;
            End;
          self.Close;
          Except
            On Exception do
              if DataModule1.ADOConnection1.InTransaction then
                DataModule1.ADOConnection1.RollbackTrans;
          End;
        end;
      end;end;
      

  3.   

    不知道你说的数据库备份和还原是整个SQL Server中某个数据库的备份还原
    还是某个table的建表备份  还是只备份数据 ?
    如果是整个数据库的备份
    dump database 数据库名 to disk=存盘路径 with init如果是还原数据库
    restore database 数据库名 from disk存盘路径 with recovery这样就可以了
    可以做成存储过程
      

  4.   

    谢谢大家,
    restore database 数据库名 from disk存盘路径  好象不行,必须用 with recovery 参数吗?
      

  5.   

    RESTORE DATABASE 考试系统 
    FROM DISK='C:\Temp\考试系统备份文件' 
    With 
    RECOVERY, 
    Move '考试系统_dat' To 'd:\考试系统.mdf', 
    Move '考试系统_log' To 'd:\考试系统_log.ldf'
    USE master 
    EXEC sp_addumpdevice 'disk', 'MyNwind_ss1', 
    'C:\Temp\考试系统备份文件2001年11月20日11时17分57秒' 
    BACKUP DATABASE 考试系统 TO MyNwind_ss1 
    EXEC sp_DropDevice 'MyNwind_ss1'
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]