谁可以告诉我怎样用程序写一个access的数据库备份?
  我想把一个数据库的东西,写到另一个数据库去保存,改怎么样做?
有代码最好了 .先谢谢了 .

解决方案 »

  1.   

    如果你只是要保存一个备份,其实还是下一个VCLZIP的控件,把数据库压缩成ZIP格式备份的好,块头小许多,能达10%。
    如果真的要写到另一个ACCESS中,则涉及到异库存取的问题,对于ACCESS而言,可以用链接表的方式来实现:把目标ACCESS库中的作为链接表链入源库中,那样就可以把目标表当成源库中的表来操作。只要写一个insert into 备份表 select 源表 的SQL就可以了。备份完成后可以删除链接表,也可以就放着下一次备份用。下一次备份可以先删除原备份表的中的记录再insert to 新数据可以了。建链接表需要adox的支持,最好是要在运行的机器上装mdac2.6。
    需要源码可跟贴要,只是我现在不大来了。要么发个短消息给我留个信箱我找到源码后发你。
      

  2.   

    又来迟了,除了上面的方法,还可以预先对MDB文件压缩,再ZIP
    unit AccessTools;interfaceuses Sysutils, ComObj, Dialogs, Variants;function DaoActive(var DaoObject:OleVariant):Boolean;
    function CompactMDB(const FileName:string):Boolean;
    function RepairMDB(const FileName:string):Boolean;implementationfunction DaoActive(var DaoObject:OleVariant):Boolean;
    begin
      Result:=False;
      try
        DaoObject:=GetActiveOleObject('DAO.DBEngine.36');
        Result:=True;
      except
        try
          DaoObject:=CreateOleObject('DAO.DBEngine.36');
          Result:=True;
        except
          DaoObject:=Null;
        end;
      end;
    end;//Compact Access MDB file
    function CompactMDB(const FileName:string):Boolean;
    var
      db:OleVariant;
      TempFile:string;
    begin
      Result:=False;
      try
        if not DaoActive(db) then
          Exit;
        try
          TempFile:=ExtractFilePath(FileName)+'~msaTemp.mdb';
          db.CompactDatabase(FileName,TempFile);
          DeleteFile(FileName);
          RenameFile(TempFile,FileName);
          Result:=True;
        except
          on E:EOleException do
            ShowMessage(E.Message);
        end
      finally
        db:=Unassigned;
      end;
    end;// Repaie Access MDB file
    function RepairMDB(const FileName:string):Boolean;
    var
      db:OleVariant;
    begin
      Result:=False;
      try
        if not DaoActive(db) then
          Exit;
        try
          db.RepairDatabase(FileName);
          Result:=True;
        except
          on E:EOleException do
            ShowMessage(E.Message);
        end
      finally
        db:=Unassigned;
      end;
    end;end.
      

  3.   

    谢谢上面的两位大哥。不过我第一次做,所以……。to chenjiong(准程序员:升级中....)  我想要源码,请给我发一份好吗。。
    占用你的时间,真是……太感谢了。
    [email protected]另:: ly_liuyang(Liu Yang) 您也没来晚。表示感谢。
      

  4.   

    直接用sql语句连接外部数据原或者用两个adoconnection连接两个数据库把数据一条一条循环导出来都可以,只是第二种方法效率比较差
      

  5.   

    to chenjiong(准程序员:升级中....)   我按你的意思做了,可是老是出现“没有默认值”,不知道怎么改?
      

  6.   

    不会的吧,我记得那段代码肯定是正确的,因为我自己试过。我再找个demo给你好了,让我找找先。
      

  7.   

    老哥,你误会了。我说上面那句话的时候,还没看到你的代码呢。我写了下面的代码,我是这样写的。
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into 连接表 select 源表');
    adoquery1.Open;才出现了“没有默认值”的问题。不好意思,我想问一下,我的这段代码是不是有很大的问题。
      

  8.   

    给你个想法,直接copyfile(*.mdb) 放到另外的地方;
    然后对保存后的文件你在用compactdatabase整理或ziplib来压缩成winzip都可以;
    还原copy回来覆盖就可以了;
    没有默认值是因为你要保存数据的数据表中的字段不能为空,而你又没给具体的值;
    不能为空的字段需要默认值的,字符穿类型的为NULL,数字类型为0
      

  9.   

    好了,问题已经搞定,大家说的都对。。有好几种方法。上面的语句应该是。
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into 2000table select * from table1');
    adoquery1.ExecSQL;搞定了。散分!