高手请问:怎样用DELPHI备份和还原ACCESS数据库?可不可以给出源代码?

解决方案 »

  1.   

    你搜一下,一大堆啊,http://search.csdn.net/Expert/topic/2390/2390653.xml?temp=.5192072
          .............其实就是copy
      

  2.   

    if CopyFile(pchar(GetCurrentDir+'\db1.mdb'),'aa.mdb',true) then
        ShowMessage('ok');
      

  3.   

    access数据库就是先断开连接,然后copyfile()到另一个安全的地方,然后再连接数据库,而恢复时做同样的工作,只不过要注意目的目录和源目录就可以了;
      

  4.   

    看看我的或许对你有用:
    unit uDataPrepare;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, IdGlobal, ExtCtrls,
      shellapi, ComCtrls;
    type
      TDataPrepareForm = class(TForm)
        GroupBox1: TGroupBox;
        BitBtn6: TBitBtn;
        GroupBox2: TGroupBox;
        BitBtn5: TBitBtn;
        Label1: TLabel;
        Edit1: TEdit;
        BitBtn4: TBitBtn;
        OpenDialog1: TOpenDialog;
        BitBtn1: TBitBtn;
        StatusBar1: TStatusBar;
        BitBtn3: TBitBtn;
        Label2: TLabel;
        Memo1: TMemo;
        procedure BitBtn6Click(Sender: TObject);
        procedure BitBtn4Click(Sender: TObject);
        procedure BitBtn3Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);
        procedure BitBtn5Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      DataPrepareForm: TDataPrepareForm;
      Path:string;
    implementationuses uMain, uDataModu, uPubvar;{$R *.dfm}
    //拷贝文件
    Procedure FileCopy( Const sourcefilename, targetfilename: String );
    Var
      S,T: TFileStream;
    Begin
      S := TFileStream.Create( sourcefilename, fmOpenRead );
      try
        T := TFileStream.Create( targetfilename,fmOpenWrite or fmCreate );
        try
          T.CopyFrom(S, S.Size ) ;
        finally
          T.Free;
        end;
      finally
        S.Free;
      end;
    End;
    //备份数据库
    procedure TDataPrepareForm.BitBtn6Click(Sender: TObject);
    var
     sf, df: string;
      F: TShFileOpStruct;
    begin
    //检查其他窗口是否已经关闭
      with Mainform do
      begin
        if MDIChildCount > 1 then
        begin
          showmessage('请将所有录入、查询窗口关闭!');
          exit;
        end;
      end;
      if trim(edit1.Text)='' then
      begin
        application.MessageBox('请先选择要备份的路径!','系统提示',16);
        edit1.SetFocus;
        exit;
      end;
      DataMod.ADOConnect.Connected := false;
      StatusBar1.Panels[0].Text := '正在备份,请稍等!';
      StatusBar1.Panels[0].Text:='';
      sf := path+'notebook.dat';
      df := edit1.Text;
      F.wnd := Handle;
      F.wFunc := FO_Copy; {操作方式}
      F.pFrom := pchar(sf + #0#0);
      F.pTo := pchar(df + #0#0);
      F.fFlags := FOF_CONFIRMMOUSE;
    //F.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION; {操作选项}
      if ShFileOperation(F) <> 0 then
        MessageDlg('备份失败!', mtInformation, [mbOk], 0)
      else
        MessageDlg('备份成功!', mtInformation, [mbOk], 0);
      StatusBar1.Panels[0].Text:= '';
      
    end;procedure TDataPrepareForm.BitBtn4Click(Sender: TObject);
    begin
      OpenDialog1.Execute;
      Edit1.Text:=OpenDialog1.FileName;
    end;
    //还原数据库
    procedure TDataPrepareForm.BitBtn3Click(Sender: TObject);
    var
      sf, df: string;
      F: TShFileOpStruct;
    begin
    //检查其他窗口是否已经关闭
      with Mainform do
      begin
        if MDIChildCount > 1 then
        begin
          showmessage('请将所有录入、查询窗口关闭!');
          exit;
        end;
      end;
      if trim(edit1.Text)='' then
      begin
        application.MessageBox('请先选择要恢复的路径!','系统提示',16);
        edit1.SetFocus;
        exit;
      end;
      DataMod.ADOConnect.Connected := false;
      StatusBar1.Panels[0].Text := '正在恢复数据,请稍等!';
      sf := edit1.Text;
      df := path+'notebook.dat';
      if not fileexists(sf) then begin
        showmessage('备份数据库没找到!');
        exit;
      end;
      F.wnd := Handle;
      F.wFunc := FO_Copy; {操作方式}
      F.pFrom := pchar(sf + #0#0);
      F.pTo := pchar(df + #0#0);
      F.fFlags := FOF_CONFIRMMOUSE;
    //F.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION; {操作选项}
      if ShFileOperation(F) <> 0 then
        MessageDlg('恢复失败!', mtInformation, [mbOk], 0)
      else
        MessageDlg('恢复成功!', mtInformation, [mbOk], 0);
      StatusBar1.Panels[0].Text:='';
    end;
    procedure TDataPrepareForm.FormCreate(Sender: TObject);
    begin
      path:=ExtractFilePath(Application.ExeName);
    end;procedure TDataPrepareForm.BitBtn1Click(Sender: TObject);
    begin
      edit1.clear;
      DataMod.ADOConnect.Connected:=true;
      close;
    end;
    //修复和压缩数据库
    procedure TDataPrepareForm.BitBtn5Click(Sender: TObject);
    begin
    begin
    //检查其他窗口是否已经关闭
      with Mainform do
      begin
        if MDIChildCount > 1 then
        begin
          showmessage('请将所有录入、查询窗口关闭!');
          exit;
        end;
      end;
      DataMod.ADOConnect.Connected := false;
    //  adodm.ADOConnection2.Connected := false;//关闭所有查询和数据表
      DataMod.Person_detailADOQu.close;
      DataMod.GroupADOQu.Close;
      DataMod.PubADOQu.Close;
      DataMod.PerBusiADOQu.Close;
      DataMod.PerInfoADOQ.Close;
      DataMod.UserADOQu.Close;
      DataMod.TempADOQ.Close;
      StatusBar1.Panels[0].Text := '正在修复压缩,请稍等!';//
      if CompactDatabase('notebook.dat','') = false then
        MessageDlg('修复过程出现错误!!', mtWarning, [mbOk], 0)
      else MessageDlg('修复完毕!', mtInformation, [mbOk], 0);end;
    end;end.