Access 中如何使用 ADO 來压缩或修复 MS Access 文件?

**Access 中如何使用 __ ADO __ 來压缩或修复 __ MS __ Access __ 文件? **

| | 专题地址: | http://access911.net/index.asp?board=4&recordid=71FAB71E
---|---

问题:

Access 中如何使用 __ ADO __ 來压缩或修复 __ Microsoft __ Access __ 文件?

__ 回答:

|
以前使用 __ DAO __ 时,Microsoft __ 有提供 __ CompactDatabase __ Method __ 來压缩 __ Microsoft __ Access __ 文件,RepairDatabase __ Method __ 來修复损坏的 __ Microsoft __ Access __ 文件,。可是自从 __ ADO __ 出来之后,好像忘了提供相对的压缩及修复 __ Microsoft __ Access __ 文件的功能。

现在 __ Microsoft __ 发现了这个问题了,也提供了解决方法,不过有版本上的限制!限制说明如下:

ActiveX __ Data __ Objects __ (ADO), __ version __ 2.1
Microsoft __ OLE __ DB __ Provider __ for __ Jet, __ version __ 4.0
这是 __ Microsoft __ 提出的 __ ADO __ 的延伸功能:Microsoft __ Jet __ OLE __ DB __ Provider __ and __ Replication __ Objects __ (JRO)

这个功能在 __ JET __ OLE __ DB __ Provider __ version __ 4.0 __ (Msjetoledb40.dll) __ 及 __ JRO __ version __ 2.1 __ (Msjro.dll) __ 中第一次被提出!
这些必要的 __ DLL __ 文件在您安裝了 __ MDAC __ 2.1 __ 之后就有了,您可以在以下的网页中下载 __ MDAC __ 的最新版本!

Universal __ Data __ Access __ Web __ Site

在下载之前先到 __ VBE __ 界面中检查一下,【引用】中的 __ Microsoft __ Jet __ and __ Replication __ Objects __ X.X __ library __ 如果已经是 __ 2.1 __ 以上的版本,您就可以不用下载了!

在您安裝了 __ MDAC __ 2.1 __ 或以上的版本之后,您就可以使用 __ ADO __ 来压缩或修复 __ Microsoft __ Access __ 文件,下面的步骤告诉您如何使用 __ CompactDatabase __ Method __ 来压缩 __ Microsoft __ Access __ 文件:

1、新建一个新表单,选择 __ VBE __ 中【引用】。
2、加入 __ Microsoft __ Jet __ and __ Replication __ Objects __ X.X __ library,其中 __ ( __ X.X __ 大于或等于 __ 2.1 __ )。
3、在适当的地方加入以下的程序代码,记得要修改 __ data __ source __ 的內容及目地文件的路径:

| Dim __ jro __ As __ jro.JetEngine
Set __ jro __ = __ New __ jro.JetEngine
jro.CompactDatabase __ "Provider=Microsoft.Jet.OLEDB.4.0;Data __ Source=d:\nwind2.mdb", __ _ __ '来源文件
"Provider=Microsoft.Jet.OLEDB.4.0;Data __ Source=d:\abbc2.mdb;Jet __ OLEDB:Engine __ Type=4" __ '目的文件

在 __ DAO __ 3.60 __ 之后,RepairDatabase __ Method __ 已经无法使用了,以上的程序代码显示了 __ ADO __ CompactDatabase __ Method __ 的用法,而它也取代了 __ DAO __ 3.5 __ 时的 __ RepairDatabase __ method!

附注:

|
1、出现错误提示(不能执行这项操作;在低版本的数据库中该版本的特性不可用。)是因为版本号与你的数据库格式不符,请看下面的对照表

引擎版本号
Jet __ OLEDB:Engine __ Type __ -> __ Jet __ x.x __ Format __ MDB __ Files __
1 __ -> __ JET10 __
2 __ -> __ JET11 __
3 __ -> __ JET2X __
4 __ -> __ JET3X __
5 __ -> __ JET4X __

2、其他的压缩修复数据库的对象以及方法:
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;240434
虽然有时可以成功地打开某些损坏的数据库,但由于索引或表行已损坏,因此数据访问速度要慢很多。可以运行 __ Microsoft __ Access __ 开发环境中的“修复和压缩数据库”实用程序来修复损坏的数据库。编程时,您可以使用 __ Jet __ and __ Replication __ Objects __ (JRO) __ 的CompactDatabase __ 方法、Jet __ OLE __ DB __ 提供程序的IJetCompact::Compact __ 方法,或 __ Data __ Access __ Objects __ (DAO) __ 的CDaoDatabase::CompactDatabase __ 方法,来实现此目的。

---|---

方法二:

| Delphi代码(未验证)
| //uses __ ComObj,ActiveX
const
__ __ SConnectionString __ __ __ __ __ __ __ = __ 'Provider=Microsoft.Jet.OLEDB.4.0;Data __ Source=%s;'
__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ +'Jet __ OLEDB:Database __ Password=%s;';

function __ GetTempPathFileName():string;
var
__ __ SPath,SFile:array __ [0..254] __ of __ char;
begin
__ __ GetTempPath(254,SPath);
__ __ GetTempFileName(SPath,'~SM',0,SFile);
__ __ result:=SFile;
__ __ DeleteFile(result);
end;

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;


方法三:

|
VC请参考:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;230496
http://support.microsoft.com/?id=230501

---|---

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus