win98下access数据库膨胀
为什么用delphi操作access数据库,在win98下运行,delete,insert几次后,数据库大小一下子从几10k升
几百M呢?
有没有人遇到过类似的问题,是怎么回事呀!
问题点数:20、回复次数:8Top
1 楼fontain()回复于 2005-06-15 10:18:02 得分 2
Access数据库自身的问题,压缩一下就好了,参考:
http://community.csdn.net/Expert/topic/4050/4050563.xml?temp=.5395777Top
2 楼wenjianyao(建)回复于 2005-06-15 11:55:17 得分 2
几10k升
几百M?是不是有点夸张阿?
是会变大,但是你这个也太夸张了吧
压缩一下吧Top
3 楼tjianliang(乡关何处)回复于 2005-06-15 12:02:56 得分 2
Access,工具,数据库实用工具,压缩和修复数据库,看是不是变小了。
不过你delete,insert几次后就从 几十K -> 几百M ,是有点夸张,是不是有什么特殊字段;
还有在WIN98下这样,在WIN2000下呢Top
4 楼ntit168()回复于 2005-07-21 08:27:51 得分 0
除了通过压缩的方法,还有什么好的方法吗?
膨胀是不是Access的bug呢Top
5 楼zzlingaaa(小舟)回复于 2005-07-21 08:34:17 得分 10
Access数据Delete的时候,好像只是删除了逻辑上的数据,并没有彻底删除,所以才会造成这种情况,压缩就是为了清除无用数据.下面是我用的一段压缩Access数据库的代码:
uses ComObj;
//压缩与修复数据库,覆盖源文件 uses ComObj;
function CompressDataBase(AFileName,APassWord: string): Boolean;
const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;' +
'Jet OLEDB:Database Password=%s;';
var
SPath,SFile: array [0..254] of Char;
STempFileName: string;
JE: OleVariant;
begin
GetTempPath(40,SPath); //取得Windows的Temp路径
GetTempFileName(SPath,'~CP',0,SFile); //取得Temp文件名,Windows将自动建立0字节文件
STempFileName := SFile; //PChar->String
DeleteFile(STempFileName); //删除Windows建立的0字节文件
try
JE := CreateOleObject('JRO.JetEngine'); //建立OLE对象,函数结束OLE对象超过作用域自动释放
OleCheck(JE.CompactDatabase(Format(SConnectionString,[AFileName,APassWord]),
Format(SConnectionString,[STempFileName,APassWord])));
//压缩数据库
//复制并覆盖源数据库文件,如果复制失败则函数返回假,
//压缩成功但没有达到函数的功能
Result := CopyFile(PChar(STempFileName),PChar(AFileName),False);
DeleteFile(STempFileName); //删除临时文件
except
Result := False; //压缩失败
end;
end;
Top
6 楼ntit168()回复于 2005-08-02 16:06:06 得分 0
upTop
7 楼MudLib(Alan)回复于 2005-08-02 16:38:02 得分 2
Access确实存在这个问题,你作个压缩的代码,让用户定期压缩一下就好了!Top
8 楼tjianliang(乡关何处)回复于 2005-08-05 13:08:45 得分 2
或许可以参考一下
http://access911.net/index.asp?board=11&pm=e&k=20%25%7D%5C%3E%D1%B9%CB%F5+%D0%DE%B8%B4%25%7D%5C%3E1%25%7D%5C%3E%25%7D%5C%3ETop




