公司现在有很多子系统,所有表格建在一个数据库中,由于数据库过于庞大,当用户某个子系统出问题后,只需要将此系统用到的表格选择性的备份后,压缩成一个文件,发回公司,将数据还原后进行分析,问题是,如何将多个表格备份,需要一个个写SQL倒出数据吗?然后如何压缩?如何分析此问题恢复?不知道到有没有人做过此问题,请指点指点,不要告诉我整个数据库备份、恢复的方法,我知道啊

解决方案 »

  1.   

    写“压缩数据库”按钮代码如下: procedure TForm16.BitBtn2Click(Sender: TObject); begin dir:=drive; Screen.Cursor := crHourGlass; if not CompactDataBaseDao(trim(edit1.text)) then   MessageDlg('压缩过程出现错误!请确认数据库没有被使用、数据库是否存在!',mtWarning, [mbOk], 0)   else   MessageDlg('压缩完毕!!', mtInformation, [mbOk], 0);  Screen.Cursor := crDefault; end; 上述代码使用了f_access中的函数CompactDataBaseDao。写“备份数据库”按钮代码如下: procedure TForm16.BitBtn1Click(Sender: TObject); var dfpath:string; begin if not DirectoryExists(trim(edit2.text)) then  begin   if MessageDlg('目录还不存在,是否要创建此目录?',     mtConfirmation, [mbYes, mbNo], 0) = mrYes then   begin     mkdir(trim(edit2.text));     if IOResult <> 0 then     MessageDlg('不能创建目录,请检查输入的路径是否正确!', mtWarning, [mbOk], 0);     exit;     end     else exit;  end; dfpath:=trim(edit2.text); if dfPath[Length(dfPath)] <> '\' then dfPath := dfPath + '\'; FileCopy1.SourceFile :=trim(edit1.Text) ; FileCopy1.TargetFile :=dfpath+'lklb.mdb'; FileCopy1.ExecCopy; MessageDlg('OK!',mtInformation, [mbOk], 0); end; 上述代码中要注意对路径中“\”的处理,仔细看看吧。在恢复数据库时如果数据库不在默认备份路径下,需要寻找数据库,所以放置了一个“打开”文件对话框,对“打开”按钮写代码如下: procedure TForm16.Button1Click(Sender: TObject); var s:string; begin if openDialog1.Execute then    begin    s:=ExtractFilePath(opendialog1.FileName);    edit3.text:=s+'lklb.mdb';    end; end; 对“恢复数据库” 写如下代码: procedure TForm16.BitBtn5Click(Sender: TObject); begin FileCopy1.SourceFile :=trim(edit3.Text) ; FileCopy1.TargetFile :=trim(edit1.Text) ;; FileCopy1.ExecCopy; MessageDlg('OK!',mtInformation, [mbOk], 0); end;    其他一些警告提示信息自己看着写吧。       
    图11-1 数据库维护   
      

  2.   

    使用BCP工具手工导出一个表
    bcp "lsdmis.dbo.BM_SPDA" OUT ".\data\BM_SPDA.TXT" -f .\fmt\BM_SPDA.fmt  -C -U"SA" -P"SA"
    倒入(先把原数据清空:)
    bcp "lsdmis.dbo.BM_SPDA" IN ".\data\BM_SPDA.TXT" -f .\fmt\BM_SPDA.fmt  -C -U"SA" -P"SA"
    导多个表的话,就些个批量文件吧,然后在程序中执行这个批量脚本就可以了
      

  3.   

    我用的是SQLServer。
    1. whbo(王红波) ,你压缩、备份的是Access哦。
    2.caiminjiang0(我只有一个理想) ,使用系统的人都没有你这么高智商啊,最好是傻瓜式操作,点点MOUSE就可以实现的。
      

  4.   

    完全备份
    var
       s_backuppath:string;
       s_server:string;
       s_database:string;
       s_backupfilename:string;
    begin
              StatusBar1.Panels[2].text:='';
              StatusBar1.Panels[2].text:='请等候,数据库备份中......';
              s_backuppath:=edit1.Text;
              s_server:=edit2.Text;
              s_database:=edit3.Text;
              s_backupfilename:=s_backuppath+datetostr(now);
              Adocommand1.ConnectionString :='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='+s_database+';Data Source='+s_server;
              ADOCommand1.CommandText := 'use Master';
              ADOCommand1.Execute;
              adocommand1.CommandText := 'execute sp_helpdevice';
              adocommand1.Execute;
              adocommand1.CommandText := 'backup database ' + s_database + ' to disk=''' +s_backupfilename + ''' with init';
              //adocommand1.CommandText := 'backup database ' + 'BanShanDB' + ' to disk=''' +'c:\data.bak' + ''' with init';
              adocommand1.Execute;
              adocommand1.CommandText := 'Use ' + s_database;
              adocommand1.Execute;
              StatusBar1.Panels[2].text:='';
              StatusBar1.Panels[2].text:='数据库备份完成!';
           //   application.MessageBox('已经成功备份数据库','数据库备份',MB_OK + MB_ICONINFORMATION);
    end;
      

  5.   

    难到就没有人做过可以选择表的SQL备份与恢复???