用access做数据库真头疼啊!!有没有?频繁读写很容易1-2G大了.恐怖!
更奇怪是某些电脑才会.我自己用win2003怎么搞都正常.虚拟机装的XP/win7也正常.不过我都自己装的原版系统.软件启动或退出时压缩这个我知道.
但在软件运行过程中由于软件功能的原因没法操作压缩.请教高手,有没好办法??.
更奇怪是某些电脑才会.我自己用win2003怎么搞都正常.虚拟机装的XP/win7也正常.不过我都自己装的原版系统.软件启动或退出时压缩这个我知道.
但在软件运行过程中由于软件功能的原因没法操作压缩.请教高手,有没好办法??.
function DaoCompactDB(const FileName,Pwd:string):Boolean;
function DaoRepairDB(const FileName:string):Boolean;implementationfunction DaoActive(var DaoObject:OleVariant):Boolean;
begin
Result:=False;
try
DaoObject:=GetActiveOleObject('DAO.DBEngine.36');
Result:=True;
except
try
DaoObject:=CreateOleObject('DAO.DBEngine.36');
Result:=True;
except
DaoObject:=Null;
end;
end;
end;//压缩Access数据库
function DaoCompactDB(const FileName,Pwd:string):Boolean;
var
db:OleVariant;
TempFile:string;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
TempFile:=ExtractFilePath(FileName)+'msaTemp.mdb';
db.CompactDatabase(FileName,TempFile,,,';pwd='+Pwd);
DeleteFile(FileName);
RenameFile(TempFile,FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;//修复Access数据库
function DaoRepairDB(const FileName:string):Boolean;
var
db:OleVariant;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
db.RepairDatabase(FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;应该在DaoActive中检查一下DAO版本,通用性才最强
文件型数据库一般删除数据时,只是做个删除标记,实际并无删除,所以文件会越来越大,Access的修复压缩功能就是将这些做了删除标记的数据真正删除,所以在频繁的写数据库时,写操作尽量减少
还是换数据库吧,sqlite或sqlserver