我用下列语句能实现对sqlserver的备份却不能实现对access的备份
if  SaveDialog1.Execute then
begin
      s:= SaveDialog1.FileName ;
      ADOConnection1.Close;
      ADOCommand1.CommandText:='BACKUP  DATABASE  DATABASE1  TO   DISK='+Quotedstr (s);
      ADOCommand1.Execute ;
end;我想知道是否对access的备份只有通过copyfile的方式实现,谢谢

解决方案 »

  1.   

    以下是备份一个SQL数据库的代码,可是别人非要说是备份ACCESS的,给你看看对你有帮助:unit BackUp_Form;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, TFlatGaugeUnit, StdCtrls, TFlatEditUnit, ExtCtrls,FileCtrl;type
      TBackup_F = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        ZT_FE: TFlatEdit;
        JD_FG: TFlatGauge;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Backup_F: TBackup_F;implementation{$R *.dfm}Uses
      ExtIniFiles,StrUtils;function GetFileNum(dir:string):integer;
    var
      sr:Tsearchrec;
    begin
      result:=0;
      if findfirst(dir,faanyfile,sr)=0 then
        repeat
          if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
            result:=result+1;
        until findnext(sr)<>0;
    end;
    //***********************************************************************************
    procedure Wait(second:Longint);
    var
      FirstTickCount:longint;
    begin
      FirstTickCount:=GetTickCount;
      repeat
        Application.ProcessMessages;
      until ((GetTickCount-FirstTickCount) >=second);
    end;
    //***********************************************************************************
    procedure TBackup_F.Timer1Timer(Sender: TObject);
    var
      myini:TExtIniFile;
      cz,num:integer;
      spath,dpath,name,RQ:string;
      sr:Tsearchrec;
      StartupInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;
    begin
      Timer1.Enabled:=false;
      myini:=TExtIniFile.Create(ExtractFilePath(Application.ExeName)+'set.ini');
      cz:=myini.ReadInteger('bakup','CZ',0);
      if cz=0 then
        begin
          spath:=ExtractFilePath(Application.ExeName)+'Data';
          dpath:=myini.ReadString('bakup','BakPath','');
          dpath:=dpath+'\'+AnsiReplaceStr(DateTimeToStr(now),':','');
          ForceDirectories(dpath);
          num:=GetFileNum(spath+'\*.*');
          ZT_FE.Text:='正在备份数据库......';
          JD_FG.MaxValue:=num;
          if findfirst(spath+'\*.*',faanyfile,sr)=0 then
            repeat
              if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
                begin
                  copyfile(pchar(spath+'\'+sr.Name),pchar(dpath+'\'+sr.Name),false);
                  JD_FG.Progress:=JD_FG.Progress+1;
                end;
              Wait(100);
            until findnext(sr)<>0;
          ZT_FE.Text:='数据库备份成功';
          MessageBox(handle,'恭喜你:数据库备份成功!','祝贺你',MB_OK or MB_ICONINFORMATION);
        end
        else begin
          RQ:=myini.ReadString('bakup','RQ','');
          spath:=myini.ReadString('bakupdian',RQ,'');
          spath:=spath+'\'+RQ;
          dpath:=ExtractFilePath(Application.ExeName);
          dpath:=dpath+'Data';
          num:=GetFileNum(spath+'\*.*');
          ZT_FE.Text:='正在还原数据库......';
          JD_FG.MaxValue:=num;
          if findfirst(spath+'\*.*',faanyfile,sr)=0 then
            repeat
              if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
                begin
                  copyfile(pchar(spath+'\'+sr.Name),pchar(dpath+'\'+sr.Name),false);
                  JD_FG.Progress:=JD_FG.Progress+1;
                end;
              Wait(100);  
            until findnext(sr)<>0;
          ZT_FE.Text:='数据库还原成功';
          MessageBox(handle,'恭喜你:数据库还原成功!','祝贺你',MB_OK or MB_ICONINFORMATION);
        end;
      StartupInfo.cb:=sizeof(StartupInfo);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      CreateProcess(pchar(ExtractFilePath(Application.ExeName)+'TSGL.exe'),nil,nil,nil,false,0,nil,nil,StartupInfo,ProcessInfo);
      close;
    end;end.
      

  2.   

    把数据库拷贝不就成了,比sqlserver简单的多了
    还原的时候拷贝回去再连接
      

  3.   

    是啊我都是用拷贝文件来实现的,mdb为文件型数据库啊;
    备份时把当前连接断开复制为另外一个文件,还原时则相反操作就是了
      

  4.   

    我发现这里存在一个问题。那就是用copyfile的方法的话,当还原时,如果突然断电,会对数据库造成什么样的影响
      

  5.   

    还原的时候用事务,控制一下,备份的时候最好压缩一下,ACESS数据库直接拷贝出来的话,有点大吧
      

  6.   

    >>我想知道是否对access的备份只有通过copyfile的方式实现,谢谢
    Copy file 最簡單實用
      

  7.   

    也可以用insert 来实现,这样的好处是相当于同时对access文件进行了压缩
      

  8.   

    复制数据库就好了啊,
    ACCESS又不大,
    拷贝又快,方便