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![]()
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

注意:如要要让这段据说delphi使用ADO不能压缩Access数据库,所以这里使用的
DAO对象,另外网上说还有一个第三方的数据库驱动,可以直接压缩,有兴趣的可以
Google一下,一定可以找到满意的答案的。在压缩的过程中,一定不要打开数据库,否
则会出错的。
DAO对象,另外网上说还有一个第三方的数据库驱动,可以直接压缩,有兴趣的可以
Google一下,一定可以找到满意的答案的。在压缩的过程中,一定不要打开数据库,否
则会出错的。
procedure TForm2.N27Click(Sender: TObject);
var
DaoVar: OLEVariant;
begin
if mains.Form2.con1.Connected then mains.Form2.con1.Connected := false; //如果数据模块中的数据库连接打开,请先关闭
try
try
DaoVar := CreateOleObject('DAO.DBEngine.36');
if FileExists(ExtractFilePath(Application.ExeName)+'/data/temp.mdb') then
DeleteFile(ExtractFilePath(Application.ExeName)+'/data/temp.mdb'); //删除临时数据库文件"temp.mdb"
//DaoVar.
DaoVar.CompactDatabase(ExtractFilePath(Application.ExeName)+'/data/jcdb.mdb', ExtractFilePath(Application.ExeName)+'/data/temp.mdb'); //压缩"dbName" 到"temp.mdb"
if DeleteFile(ExtractFilePath(Application.ExeName)+'/data/jcdb.mdb') then //删除文件"dbName"
RenameFile(ExtractFilePath(Application.ExeName)+'/data/temp.mdb',ExtractFilePath(Application.ExeName)+'/data/jcdb.mdb'); //将"temp.mdb"改名为"dbName "
ShowMessage('压缩成功');
except
ShowMessage('压缩失败');
end;
finally
mains.Form2.con1.Connected := true; //为了其它操作能够正常执行,还要打开数据库连接
end;
end;
var
DaoVar: OLEVariant;
begin
if mains.Form2.con1.Connected then mains.Form2.con1.Connected := false; //如果数据模块中的数据库连接打开,请先关闭
try
try
DaoVar := CreateOleObject('DAO.DBEngine.36');
if FileExists(ExtractFilePath(Application.ExeName)+'/data/temp.mdb') then
DeleteFile(ExtractFilePath(Application.ExeName)+'/data/temp.mdb'); //删除临时数据库文件"temp.mdb"
//DaoVar.
DaoVar.CompactDatabase(ExtractFilePath(Application.ExeName)+'/data/jcdb.mdb', ExtractFilePath(Application.ExeName)+'/data/temp.mdb'); //压缩"dbName" 到"temp.mdb"
if DeleteFile(ExtractFilePath(Application.ExeName)+'/data/jcdb.mdb') then //删除文件"dbName"
RenameFile(ExtractFilePath(Application.ExeName)+'/data/temp.mdb',ExtractFilePath(Application.ExeName)+'/data/jcdb.mdb'); //将"temp.mdb"改名为"dbName "
ShowMessage('压缩成功');
except
ShowMessage('压缩失败');
end;
finally
mains.Form2.con1.Connected := true; //为了其它操作能够正常执行,还要打开数据库连接
end;
end;
浙公网安备 33010602011771号