我自己在做一个自己用的个人理财系统时,由于想方便程序,所以使用了Acess数据库,使用方便。本是没什么事,做完了之后就突然想到我之前做的一些使用SQL数据库的程序时,偶尔删除大量数据时要收缩下数据库,我就自己没事收缩下Acess数据库,没想到居然小了一半,这还只是我测试时使用的数据,如果长此以往那空间不是浪费太大了。
之后我就去找了好多的用命令收缩数据库的方法,但是找了好多,大体都是两种,一种是CompactDatabase(原数据库文件,新数据库文件,原密码,新密码,还有一个参数不太懂)。但是这种一直提示无效的参数数目。
另一种就是我今天刚测试成功的。
var
strS:string;//原数据库
strT:string;//收缩完的数据库
jro:OleVariant;
begin
jro:=createoleobject( 'jro.jetengine');
strS:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/11.mdb';
strT:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/22.mdb';
jro.CompactDatabase(strS,strT);
end;
不过在这之前我也有测试过类似的方法,但是却提示‘找不到可安装的ISAM’。后来找下类似的问题才知道是由于空格的原因,因为是在网上复制的,所以里面的空格会有问题,主要是像Data Source这种本身单词有空格的,必须保证他们蹭的空格只有一个英文下的空格。
还有的网上的strT里写的是:strT:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/22.mdb;Jet OLEDB:Engine Type=4';,但是这却会提示版本不符的提示,可能是我的版本太低了,所以我把后面那版本的去掉。另外的数据库的连接问题和数据库文件的覆盖网上有很多可以参考,我就不在多这提了。
希望能给读者方便