使用Delphi压缩Access
Access数据库是我们经常使用的数据库,但是Access数据库在使用的过程中,随着
时间的迁移已经数据的反复添加与删除,整个数据库软件就会变得越来越臃肿。Access
的DBMS为我们提供了修复和压缩数据库的功能,但是在使用开发基于Access的数据库
应用的过程中,最终用户的机器上不一定都有DBMS,况且用户也不一定会使用这个功
能,所以我们最好能够在程序里面加入压缩功能,这样用户使用的时候就会很方便了。
下面参照网上的资料写的是一个压缩数据库的函数compressDB,要让这段代码顺利
编译,需要use 一下ComObj
编译,需要use 一下ComObj
1
function compressDB(dbName:
string
): Boolean;
2 var
3 DaoVar: OLEVariant;
4 begin
5 if DM.con1.Connected then DM.con1.Connected : = false ; // 如果数据模块中的数据库连接打开,请先关闭
6 try
7 try
8 DaoVar : = CreateOleObject( ' DAO.DBEngine.36 ' );
9 if FileExists( ' temp.mdb ' ) then DeleteFile( ' temp.mdb ' ); // 删除临时数据库文件"temp.mdb"
10
11 DaoVar.CompactDatabase(dbName, ' temp.mdb ' ); // 压缩"dbName" 到"temp.mdb"
12
13 if DeleteFile(dbName) then // 删除文件"dbName"
14 RenameFile( ' temp.mdb ' , dbName); // 将"temp.mdb"改名为"dbName "
15 ShowMessage( ' 压缩成功 ' );
16 Result : = true ;
17 except
18 Result : = false ;
19 end;
20 finally
21 DM.con1.Connected : = true ; // 为了其它操作能够正常执行,还要打开数据库连接
22 end;
23 end;
24
2 var
3 DaoVar: OLEVariant;
4 begin
5 if DM.con1.Connected then DM.con1.Connected : = false ; // 如果数据模块中的数据库连接打开,请先关闭
6 try
7 try
8 DaoVar : = CreateOleObject( ' DAO.DBEngine.36 ' );
9 if FileExists( ' temp.mdb ' ) then DeleteFile( ' temp.mdb ' ); // 删除临时数据库文件"temp.mdb"
10
11 DaoVar.CompactDatabase(dbName, ' temp.mdb ' ); // 压缩"dbName" 到"temp.mdb"
12
13 if DeleteFile(dbName) then // 删除文件"dbName"
14 RenameFile( ' temp.mdb ' , dbName); // 将"temp.mdb"改名为"dbName "
15 ShowMessage( ' 压缩成功 ' );
16 Result : = true ;
17 except
18 Result : = false ;
19 end;
20 finally
21 DM.con1.Connected : = true ; // 为了其它操作能够正常执行,还要打开数据库连接
22 end;
23 end;
24
注意:如要要让这段据说delphi使用ADO不能压缩Access数据库,所以这里使用的
DAO对象,另外网上说还有一个第三方的数据库驱动,可以直接压缩,有兴趣的可以
Google一下,一定可以找到满意的答案的。在压缩的过程中,一定不要打开数据库,否
则会出错的。
DAO对象,另外网上说还有一个第三方的数据库驱动,可以直接压缩,有兴趣的可以
Google一下,一定可以找到满意的答案的。在压缩的过程中,一定不要打开数据库,否
则会出错的。