多种数据DELPHI备份方式(源码)

Access:
//数据备份(创建一个新的备份文件)。
procedure TMainForm.BitBtn1Click(Sender: TObject);
var
    F:TShFileOpStruct;
    DataBackupFileName:string;
begin
    if MessageDlg('备份数据库将创建一个新的Access数据备份文件。'+#13+#10+
                  ''+#13+#10+
                  '你确定要备份数据库吗?',mtConfirmation,
                  [mbyes,mbno], 0) = mrno then Exit;
    F.wnd:=Handle;
    F.wFunc:=Fo_COPY; //操作方式:拷贝数据
    F.pFrom:=pAnsichar(ExtractFileDir(Application.ExeName)+'\Data\FB.mdb'+#0);
    OpenDialog1.Filter:='Access文件(*.mdb) ¦*.mdb';
    OpenDialog1.Title:='选择备份路径和文件名';
    OpenDialog1.InitialDir := ExtractFileDir(Application.ExeName)+'\Backup';
    if OpenDialog1.Execute then
    F.pTo:=pAnsichar(OpenDialog1.FileName+'[Access备份'+//构造备份文件名
           FormatDateTime('yyyy-mm-dd',Now)+']'+'.mdb');//进行文件备份
    F.fFlags:=FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;//操作选项
    if ShFileOperation(F)=0 then
       MessageDlg(#13+#10+' Access数据文件备份成功!',mtInformation,[mbYes],0)
    else
       MessageDlg(#13+#10+' Access数据文件备份失败!' ,mtWarning,[mbYes],0);
end;

//数据恢复(先删除原数据库文件,再把备份数据库文件写入)。
procedure TMainForm.BitBtn2Click(Sender: TObject);
var
    F:TShFileOpStruct;
begin
    if MessageDlg('数据还原将重写当前Access数据。'+#13+#10+
                  ''+#13+#10+
                  '你确定要还原备份数据吗?',mtConfirmation,
                  [mbyes,mbno], 0) = mrno then Exit;
    F.wnd:=Handle;
    F.wFunc:=Fo_Delete;//操作方式:删除数据
    F.pFrom:=pAnsichar(ExtractFileDir(Application.ExeName)+'\Data\FB.mdb'+#0);
    F.fFlags:=FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;//设置操作选项
    DM.Dataconn.Connected:=False;//断开连接
    //将文件删除至回收站
    //if ShFileOperation(F) <> 0 then
    //   MessageDlg('删除Access原始数据文件出错。数据库恢复失败!',mtError,[mbYes],0)
    //else
    begin
       //设置文件选项
       OpenDialog1.Filter:='Access文件(*.mdb) ¦*.mdb';
       OpenDialog1.InitialDir:=ExtractFileDir(Application.ExeName)+'\Backup\';
       OpenDialog1.Title:='请选择备份文件';
       if OpenDialog1.Execute then//打开拷贝文件对话框
       //拷贝文件
       if CopyFile(PChar(OpenDialog1.FileName),
          PChar(ExtractFileDir(Application.ExeName)+'\Data\FB.mdb'),False) then
          MessageDlg('Access数据文件恢复完成。数据库恢复成功。',mtInformation,[mbYes],0);
       DM.Dataconn.Connected:=True;//恢复连接
    end;
end;

Paradox数据库备份
procedure TDataBackupForm.BitBtn1Click(Sender: TObject);
begin
    if MessageDlg('备份数据库将重写以前的数据备份。'+#13+#10+
                  ''+#13+#10+
                  '你确定要备份数据库吗?',mtConfirmation,
                  [mbyes,mbno], 0) = mrno then Exit;
    if Trim(Edit1.Text)='' then
    begin
       MessageDlg('请选择数据库备份路径!',mtInformation,[mbYes],0);
       Edit1.setfocus;
       Exit;
    end;
    Path:=False;
    ProgressBar1.Visible:=True;
    try
    begin
       dir:=dir+'\data\';//获取源数据库所在目录
       createdir(pchar(Edit1.Text));//创建备份目录
       //备份数据表(cl)
       CopyFile(pchar(dir+'cl.DB'),pchar(Edit1.Text+'\'+'cl.DB'),False);
       CopyFile(pchar(dir+'cl.FAM'),pchar(Edit1.Text+'\'+'cl.FAM'),False);
       CopyFile(pchar(dir+'cl.PX'),pchar(Edit1.Text+'\'+'cl.PX'),False);
       CopyFile(pchar(dir+'cl.TV'),pchar(Edit1.Text+'\'+'cl.TV'),False);
       //备份数据表(clcl)
       CopyFile(pchar(dir+'clcl.DB'),pchar(Edit1.Text+'\'+'\clcl.DB'),False);
       CopyFile(pchar(dir+'clcl.FAM'),pchar(Edit1.Text+'\'+'\clcl.FAM'),False);
       CopyFile(pchar(dir+'clcl.PX'),pchar(Edit1.Text+'\'+'\clcl.PX'),False);
       CopyFile(pchar(dir+'clcl.TV'),pchar(Edit1.Text+'\'+'\clcl.TV'),False);
       //备份数据表(pz)
       CopyFile(pchar(dir+'pz.DB'),pchar(Edit1.Text+'\'+'\pz.DB'),False);
       CopyFile(pchar(dir+'pz.FAM'),pchar(Edit1.Text+'\'+'\pz.FAM'),False);
       CopyFile(pchar(dir+'pz.PX'),pchar(Edit1.Text+'\'+'\pz.PX'),False);
       CopyFile(pchar(dir+'pz.TV'),pchar(Edit1.Text+'\'+'\pz.TV'),False);
       //备份数据表(users)
       CopyFile(pchar(dir+'users.DB'),pchar(Edit1.Text+'\'+'\users.DB'),False);
       CopyFile(pchar(dir+'users.FAM'),pchar(Edit1.Text+'\'+'\users.FAM'),False);
       CopyFile(pchar(dir+'users.PX'),pchar(Edit1.Text+'\'+'\users.PX'),False);
       CopyFile(pchar(dir+'users.TV'),pchar(Edit1.Text+'\'+'\users.TV'),False);
       //备份数据表(ylfb)
       CopyFile(pchar(dir+'ylfb.DB'),pchar(Edit1.Text+'\'+'\ylfb.DB'),False);
       CopyFile(pchar(dir+'ylfb.FAM'),pchar(Edit1.Text+'\'+'\ylfb.FAM'),False);
       CopyFile(pchar(dir+'ylfb.PX'),pchar(Edit1.Text+'\'+'\ylfb.PX'),False);
       CopyFile(pchar(dir+'ylfb.TV'),pchar(Edit1.Text+'\'+'\ylfb.TV'),False);
       Thread.execute;//执行线程
       //设置界面
       ShellTreeView1.Visible:=False;
       DataBackupForm.Height:=312;
       MessageDlg(#13+#10+' 数据库备份成功!',mtInformation,[mbYes],0);
       ProgressBar1.Visible:=False;
       ProgressBar1.Position:=0;
    end;
    except
       ShellTreeView1.Visible:=False;
       DataBackupForm.Height:=312;
       MessageDlg(#13+#10+'数据库备份失败!' ,mtWarning,[mbYes],0);
    end;
    Path:=True;
    ShellTreeView1.Visible:=False;
    DataBackupForm.Height:=312;
    BitBtn3.Caption:='选择目录';
end;


SQL方式
//获取数据备份目的路径
procedure TDataBackForm.FormShow(Sender: TObject);
var
   SourcePath: string;
begin
    Animate1.Visible:=False;
    SourcePath:=ExtractFileDir(Application.ExeName);
    //获取应用程序路径
    if (StrLen(PChar(SourcePath)) <> 3) then
    begin
       SourcePath:=SourcePath+'\';
       //Edit1.Text:=SourcePath+'BackupData\Data'+
       //       formatdatetime('yyyymmdd',date)+'.back';
       //设置路径名+文件名
       Edit1.Text:=SourcePath+'BackupData\'+'BackupData.back';
    end;
end;

//改变恢复数据按钮的使能状态(随数据备份目的路径的选择而变化)
procedure TDataBackForm.Edit1Change(Sender: TObject);
begin
    if trim(Edit1.Text) <> '' then
     BackData.Enabled:=True
   else
     RecoverData.Enabled:=False;//当路径框中为空时候, 恢复数据不可用
end;

//浏览数据备份目的路径
procedure TDataBackForm.BitBtn4Click(Sender: TObject);
begin
    //OpenDialog1.Filter:='备份文件(*.back) ¦*.back ¦所有文件(*.*) ¦*.*';//设置备份文件后缀
    OpenDialog1.Filter:='所有文件(*.*) ¦*.* ¦备份文件(*.back) ¦*.back';//设置备份文件后缀
    OpenDialog1.InitialDir:=ExtractFileDir(Application.ExeName)+'\backupdata';
    //设置恢复路径
    if OpenDialog1.Execute then
    Edit1.Text:=OpenDialog1.FileName;
    //if SaveDialog1.Execute then
    //Edit1.Text:=OpenDialog1.FileName;
end;

//备份数据
procedure TDataBackForm.BackDataClick(Sender: TObject);
var
    DataPath:string;
begin
    if Trim(Edit1.Text)='' then
    begin
       MessageDlg(#13+#10+'请选择数据库备份路径!',mtInformation,[mbYes],0);
       Edit1.setfocus;
       Exit;
    end;
    Caption:='正在备份数据....';
    Animate1.Visible:=True;
    Animate1.Active:=True;//备份数据库命令语句
    if ExtractFileExt(Edit1.Text)='.back' then
       DataPath:=''
    else
       DataPath:='.back';
    Edit1.Text:=Edit1.Text+DataPath;
    DM.backcomm.CommandText:='backup database Data1 to disk='''+Edit1.Text+'''';
    try
       DM.backcomm.Execute;//执行备份
       Animate1.Active:=False;
       Animate1.Visible:=False;
       MessageDlg(#13+#10+'数据库备份成功!',mtInformation,[mbYes],0);
    except
       Animate1.Active:=False;
       Animate1.Visible:=False;
       MessageDlg(#13+#10+'数据库备份失败!',mtWarning,[mbYes],0);
    end;
    Caption:='数据备份和恢复';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 需求分析目前在不少部门存储着大量的数据,包括数据库数据和文件数据,并处于不断更新、不断扩充的状态。数据量大,数据源分布广,同一设备上数据分布散等特点使得对这些数据维护和管理有一些困难。为防止数据因某些不可控制的事故而丢失,对上述数据必须进行备份,以备在主数据丢失时,进行还原。目前的备份手段多为人工定期(不定期)地进行,这样就存在着以下一些问题:1.人工备份多在正常工作期间进行,这样数据备份时很可能会影响数据在正常业务中的使用,会造成业务应用系统性能不稳定,严重的还会造成数据丢失。2.由于数据分布散,人工备份时难于及时掌握数据更新动态,为防止数据备份有丢失,往往只能“一锅炖”,每次都做完整性拷贝,这样每次备份量将叠加,备份延时将增加,造成网络资源浪费,网络流量增加,从而可能会对网络的日常通信造成影响。3.工作烦琐,操作不方便。 二、 系统介绍1. 系统简介软件可自动完成SQL Server数据库和文档的数据定时自动备份,由用户选择对哪些数据库或文档进行数据备份,提供对备份、还原数据作业的管理、分析、日志跟踪等功能。2.软件功能: (1)自动生成备份指令,减少备份的难度,一般用户也可操作,也可由技术人员设好后发给用户。 (2)定时备份按用户的设定的作业时间自动执行。 (3)支持用户任意时刻的手动备份。 (4)支持数据的完整备份、差异备份、增量备份(该项功能目前只用于文件项目)。 (5)完善的数据库还原功能,随时可能数据进行还原操作。 (6)操作日志跟踪功能。用户的操作都保留在日志中,以供备备察。 (7)系统维护提供对备份数据、日志、操作日志的清理功能。3.解决问题针对人工数据备份存在的问题,结合单位生活生产情况,该软件能够基本上解决目前人工数据备份的弊端。(1)通过设置定时备份时刻,从而可以避开数据日常的业务工作期,选择夜间没有数据访问或很少数据访问的时间进行。(2)通过设置备份方式(如:差异备份、增量备份),可以避免每次备份不必要重复备份量。(3)通过对日志的跟踪,可以很快很及时地了解数据备份情况(包括每次的耗时、备份量等)。(4)人力资源消耗降低到几乎为零。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值