压缩、恢复和备份Access数据库的处理

zheng518 2007-01-30 04:25:09
我用delphi连接access数据库,想请教各位如何在delphi开发的应用程序中实现对使用的数据库备份、压缩。以及恢复等功能。谢谢!其中access数据库的ADO连接使用了其工作组信息文件进行加密,其数据库本身没有密码。其连接字符串如下所示:

strConn := 'Provider=Microsoft.Jet.OLEDB.4.0;'
+ 'password="admin89567425";' //用户工作组(*.mdw)密码
+ 'User ID=ts8555098who;' //用户工作组(*.mdw)用户名
+ 'Data Source='+GAppPath+'Data\SysDB.mdb;' +'Persist Security Info=True;'
+ 'Mode=Share Deny None;Extended Properties="";'
+ 'Jet OLEDB:System database='+GAppPath+'SysSecured.mdw;' //用户工作组文件
+ 'Jet OLEDB:Registry Path="";'
+ 'Jet OLEDB:Database Password="";' //数据库密码
+ 'Jet OLEDB:Engine Type=1;'
+ 'Jet OLEDB:Database Locking Mode=1;'
+ 'Jet OLEDB:Global Partial Bulk Ops=2;'
+ 'Jet OLEDB:Global Bulk Transactions=1;'
+ 'Jet OLEDB:New Database Password="";'
+ 'Jet OLEDB:Create System Database=False;'
+ 'Jet OLEDB:Encrypt Database=False;'
+ 'Jet OLEDB:Don''t Copy Locale on Compact=False;'
+ 'Jet OLEDB:Compact Without Replica Repair=False;'
+ 'Jet OLEDB:SFP=False';
...全文
471 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
anan3000 2007-04-05
  • 打赏
  • 举报
回复
压缩是别人的
lz自己改一下吧
{*******************************************************}
{ }
{ 单元名称: UntCompact }
{ 创建日期: 2005-08-21 }
{ 摘要说明: ACCESS数据库压缩操作函数 }
{ }
{ 详细说明: }
{ }
{ 参  阅: }
{ }
{ 已知问题: }
{ }
{ 待作事项: }
{ }
{ 作  者: 胡孟杰 }
{ Copyright (C) 2005 FdAuto }
{ 当前版本: 1.0 }
{ 版本历史: }
{ }
{*******************************************************}
unit UntCompact;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, ActiveX;

function GetTempPathFileName():ShortString; stdcall;
function CreateAccessFile(FileName:String;PassWord:string=''):boolean; stdcall;
//压缩ACCESS数据库
function CompactDatabase(AFileName,APassWord:string):boolean; stdcall;

implementation

Const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database Password=%s;';

{==========================================================================
 函数名: GetTempPathFileName
功 能: 取得临时文件名
参 数: 无
返回值: 临时文件名
作 者: 胡孟杰
日 期: 2005.08.21
==========================================================================}
function GetTempPathFileName():ShortString;
var
SPath,SFile:array [0..254] of char;
begin
GetTempPath(254,SPath);
GetTempFileName(SPath,'~SM',0,SFile);
Result:=SFile;
DeleteFile(Result);
end;
{==========================================================================
 函数名: CreateAccessFile
功 能: 建立Access文件,如果文件存在则失败
参 数: FileName:String;PassWord:string='',数据库文件名,数据库密码
返回值: true,false
作 者: 胡孟杰
日 期: 2005.08.21
==========================================================================}
function CreateAccessFile(FileName:String;PassWord:string=''):boolean;
var
STempFileName:string;
vCatalog:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vCatalog:=CreateOleObject('ADOX.Catalog');
vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));
result:=CopyFile(PChar(STempFileName),PChar(FileName),True);
DeleteFile(STempFileName);
except
result:=false;
end;
end;
{==========================================================================
 函数名: CompactDatabase
功 能: 压缩与修复数据库,覆盖源文件
参 数: AFileName,APassWord:string,数据库文件名,数据库密码
返回值: true,false
作 者: 胡孟杰
日 期: 2005.08.21
==========================================================================}
function CompactDatabase(AFileName,APassWord:string):boolean;
var
STempFileName:string;
vJE:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord]));
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);
except
result:=false;
end;
end;

end.
anan3000 2007-04-05
  • 打赏
  • 举报
回复
备份和恢复的
procedure Tf_back.SBtnBackUpClick(Sender: TObject);
var
sus: Boolean;
begin
SaveDialog1.FileName:=FormatdateTime('yyyy-mm-dd', now)+'备份';
SaveDialog1.InitialDir:=ExtractFilePath(Application.ExeName)+'back';
if SaveDialog1.Execute then
begin
sus := CopyFile(PChar(ExtractFilePath(Application.ExeName)+
'DB\data.mdb'), PChar(SaveDialog1.FileName+'.bak'), False);
if (sus=True) then
begin
ShowMessage('数据备份成功!文件路径为:'+SaveDialog1.FileName+'.mdb');
Close;
end
else ShowMessage('数据备份失败!'+'请重新备份!');
end;
end;


procedure Tf_back.SBtnRestoreClick(Sender: TObject);
var
sus: Boolean;
begin
OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName)+'back';
if OpenDialog1.Execute then
begin
sus := CopyFile(PChar(OpenDialog1.FileName), PChar(ExtractFilePath(
Application.ExeName)+'DB\data.mdb'),False);
if (sus=True) then
begin
ShowMessage('数据恢复成功!');
Close;
end
else ShowMessage('数据恢复失败!'+'请重新恢复!');
end;
end;
xiaocai800322 2007-04-05
  • 打赏
  • 举报
回复
关注
zuoansuifeng 2007-04-05
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4718/4718818.xml?temp=.8001215

有疑问之前建议LZ多从网上找下资料,然后动手实践,这样比你直接问进步快些
cnhxjtoa 2007-04-05
  • 打赏
  • 举报
回复
关注中,顶起来

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧