如何编写程序备份、恢复SQLServer中的数据:
 1.可以备份、恢复多个或一个表格数据.
 2.备份、恢复都是压缩成一个文件。

解决方案 »

  1.   

    /////////备份//////////////////////////
    procedure TForm18.BitBtn1Click(Sender: TObject);
    begin
    adoquery1.Close;
    try
      with adoquery1 do
        begin
        close;
        sql.Clear;
        sql.add('backup database mdf to disk=''c:\back1.bak''');
        execsql;
        end;
      showmessage('备份完成');
    except
      on e:exception do
       showmessage('备份失败');
    end;
    end;///////////////还原///////////////////////////
    procedure TForm18.BitBtn2Click(Sender: TObject);
    begin
    adoquery1.Close;
    try
      with adoquery1 do
        begin
        close;
        sql.Clear;
        sql.add('restore database mdf from disk=''c:\back1.bak''');
        execsql;
        end;
      showmessage('还原成功');
    except
      on e:exception do
       showmessage('还原失败');
    end;
    end;
      

  2.   

    http://community.csdn.net/Expert/topic/3424/3424987.xml?temp=.4399225
      

  3.   

    --恢复的时候一定要断开所要恢复的数据库
      DM.CLE_Connect.Connected := False;
      MySQL := 'ALTER DATABASE DB_CLE SET OFFLINE WITH ROLLBACK IMMEDIATE';
      with ADOQueryRestor do
      begin
        Close;
        SQL.Clear;
        SQL.Text := MySQL;
        try
          ExecSQL;
        except    end;
      end;
      RestorStr := 'RESTORE DATABASE DB_CLE FROM DISK = ''' + Trim(e_lj.Text) + ''' WITH REPLACE';
      with ADOQueryRestor do
      begin
        Close;
        SQL.Clear;
        SQL.Text := RestorStr;
        try
          ExecSQL;
          Application.MessageBox('恢复数据库成功!','提示!',mb_ok+mb_iconinformation);
        except
          Application.MessageBox('恢复数据库出错!','错误!',mb_ok+mb_iconError);
        end;
      end;
      MySQL := 'ALTER DATABASE DB_CLE SET ONLINE WITH ROLLBACK IMMEDIATE';
      with ADOQueryRestor do
      begin
        Close;
        SQL.Clear;
        SQL.Text := MySQL;
        try
          ExecSQL;
        except    end;
      end;
      DM.CLE_Connect.Connected := True;
      

  4.   

    各位大俠,再次重申我的话题:
    a.数据库中的表格是选择性备份,不是整个数据库都备份,整个备份、恢复俺会。
    b.讨论下俺的思路:
        首先要将备份的表格选择出来, 通过SQL语句查询出一个个表格数据,再将所有数据压缩成一个
    .dat文件或别的文件。
        问题在于:
              1.所有数据在一个文件中,如何区分不同表格数据?
              2.如何区分备份表格与恢复表格字段类型一致?
      

  5.   

    还有备份表的?
    那先查查SQL SERVER联机帮助先撒...
    偶好象是没找到..
      

  6.   

    adocommand1.ConnectionString:='Provider=SQLOLEDB.1;Password='+PASSWORD.Text+
                                      ';Persist Security Info=True;User ID='+USER.Text+
                                      ';Initial Catalog='+DATABASE.Text+
                                      ';Data Source='+IP.Text;
        with adocommand1 do//用ADocommand控件
        begin
          CommandText:='use Master';//
          Execute;
          CommandText:='execute sp_helpdevice';//系统存储过程
          Execute;
          CommandText:='backup database '+DATABASE.Text+' to disk='''+EX.Text+''' with init';
          Execute;
          CommandText:='Use '+B_DATABASE.Text;//这行应当是这样
          Execute;
      

  7.   

    adocommand1.ConnectionString:='Provider=SQLOLEDB.1;Password='+R_PASSWORD.Text+
                                     ';Persist Security Info=True;User ID='+R_USER.Text+
                                     ';Initial Catalog=Master'+//B_DATABASE.Text
                                     ';Data Source='+R_IP.Text;
        with adocommand1 do//用AdoCommand控件
        begin
          CommandText:='use Master';
          Execute;
          CommandText:='execute sp_helpdevice';
          Execute ;
          CommandText:='Restore database '+R_DATABASE.Text+' From disk='''+R_EX.Text+''' with replace';//这行应当是这样
          Execute ;
        end;
      

  8.   

    顺便问一下,假如我用SQL带的那种直接写“BakUp”的方式,备份的数据库在另外一台机器上,那就会产生把备份文件保存到那台机器上而不是你操作备份的机器上。那么这个问题应该怎么解决,如果可以解决能否给出一个详细的实例。谢谢。
      

  9.   

    备份:    with adocommand_restore do//用ADocommand控件
        begin
              CommandText:='use Master';//
              Execute;
              CommandText:='execute sp_helpdevice';//系统存储过程
              Execute ;
              CommandText:='backup database '+'db_name'+' to disk='''+FileName+''' with init';//这行应当是这样
              Execute ;
              CommandText:='Use '+'db_name';//这行应当是这样
              Execute ;
    application.MessageBox('已经成功备份数据库','数据库备份',MB_OK + MB_ICONINFORMATION);
    end;
    恢复:
    with adocommand1 do//用AdoCommand控件
             begin
              CommandText:='use Master';
              Execute;
              CommandText:='execute sp_helpdevice';
              Execute ;
              CommandText:='Restore database '+'db_name'+' From disk='''+'c:\data1.bak'+''' with replace';//这行应当是这样
              Execute ;
              CommandText:='Use '+'db_name';//这行应当是这样
              Execute ;
              application.MessageBox('已经成功恢复数据库','数据库恢复',MB_OK + MB_ICONINFORMATION);
              end;*注:db_name指数据库的名称
      

  10.   

    以前我做过类似的东东。其实基本原理就是使用BCP out和bcp in。我当时写的还可以导出表结构和生成导入脚本。