您的位置:首页 > 编程语言 > Delphi

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

2012-02-21 16:21 197 查看
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:='数据备份和恢复';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: