在程序的当前目录下面有一个db1.mdb的access数据库,如何写delphi代码,把这个数据库备份到另外一个目录下面,也就是说,我想用代码把access数据库“复制”一份来做备份。

解决方案 »

  1.   

    我想用代码把access数据库“复制”一份来做备份
    --------------
    用CopyFile来复制呗~
      

  2.   

    说白了,你的问题就是文件的复制吗。。用COPYFILE就可以了。。
      

  3.   

    除了文件复制,你还可以将ACCESS中的数据导入到文本文件或是EXCEL中。
      

  4.   

    是啊,直接用copyfile函数复制一份不就可以了
    如果想写得好些的话,用这个函数也可以,它可以压缩和修复一下access数据库
    Function CompactAndRepair(sOldMDB:String;sNewMDB:String;psw:string;password:boolean):Boolean;
    const
      sProvider='Provider=Microsoft.Jet.OLEDB.4.0;';
    var
      oJetEng:JetEngine;
    begin
      if password then
        sOldMDB:=sProvider+'Data Source='+sOldMDB+';jet oledb:database password="'+psw+'"'
      else
        sOldMDB:=sProvider+'Data Source='+sOldMDB;
        
      if password then
         sNewMDB:=sProvider+'Data Source='+sNewMDB+';jet oledb:database password="'+psw+'"'
      else
         sNewMDB:=sProvider+'Data Source='+sNewMDB;
      try
        oJetEng:=CoJetEngine.Create;
        oJetEng.CompactDatabase(sOldMDB, sNewMDB);    
        oJetEng:=Nil;
        Result:=True;
      except
        oJetEng:=Nil;
        Result:=False;
      end;
    end;  里面用到的一些东西可以通过下面的方法得到
    a) 在Delphi IDE中选择Project - Import Type Library.                      
    b) 往下翻直到你找到“Microsoft Jet and Replication Objects 2.1 Library”.
      

  5.   

    我编的一个小编序的access备份到excel文件procedure TForm1.Button6Click(Sender: TObject);
    var
      range,v,sheet: variant;
      i : integer;
    begin
      if dm.ADOQuery1.recordcount=0 then
        Application.MessageBox('没有信息可以输出', '系统提示', MB_ICONERROR);
      //end;
      v:=createoleobject('excel.application');
      v.workbooks.add;
      sheet:=v.workbooks[1].worksheets[1];
      range := sheet.range['A1:d1'];
      dm.adoquery1.first;
      i:=0;
      while not dm.ADOQuery1.eof do
       begin
         inc(i);
         sheet.cells[i,1]:=trim(dm.ADOQuery1.fieldbyname('项目').AsString);
         sheet.cells[i,2]:=trim(dm.ADOQuery1.fieldbyname('价格').AsString);
         sheet.cells[i,3]:=trim(dm.ADOQuery1.fieldbyname('日期').AsString);
         sheet.cells[i,4]:=trim(dm.ADOQuery1.fieldbyname('备注').AsString);
         dm.ADOQuery1.Next;
         if dm.ADOQuery1.Eof then break;
       end;
         range.borders.linestyle:=1;
         sheet.cells.entirecolumn.autofit;
         application.messagebox('数据已经成功导出到excel!','系统提示',MB_ICONWARNING);
         v.visible:=true;
     end;
      

  6.   

    TO lzf1010(深宇) ( )
    数据库在使用的时候能不能压缩的?
    我每次压缩的时候都出错
      

  7.   

    uses ShellAPI  //需声明var OpStru:TSHFileOpStruct;
        FromDir,ToDir:array[0..128]of char;
    begin
      FillChar(FromDir,Sizeof(FromDir),0);
      StrPCopy(FromDir,'源数据库路径及数据库名');
      FillChar(ToDir,Sizeof(ToDir),0);
      SaveDialog1.FileName:='目的数据库路径及数据库名';  //可以改名,需saveDialog控件
      SaveDialog1.Filter:='Access(*.mde)|*.mde';
      if SaveDialog1.Execute then begin
        strPCopy(ToDir,SaveDialog1.FileName);
        With OpStru do begin
          Wnd:=Handle;
          wFunc:=FO_COPY;
          pFrom:=@FromDir;
          pTo:=@ToDir;
          fFlags:=FOF_FilesOnly; //FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
          fAnyOperationsAborted:=False;
        end;
        try
          ShFileOperation(OpStru);
          Showmessage('数据备份成功!');
        except
          Showmessage('数据备份失败!');
        end;
      end; //注意:备份会修改当前工作目前
    end;