请教关于导入数据后数据库文件占用空间急剧增大的问题? 我先把一个数据库的一张表的数据删除,然后再把Access中一个数据库的另一张表的数据导入到那张空表中,但是导入之后,数据库文件的大小从7M多增加到了几十兆,数据导入之前,这两个数据库文件大小是差不多的,请教一下是怎么回事? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好像ACCESS数据库中删除的数据空间不能自动释放,必须执行压缩才能释放空间的!所以如果不对Access数据库进行压缩处理,那么永远都是越来越大的! 转://uses ComObj;function CompactDatabase(AFileName,APassWord:string):boolean;//压缩与修复数据库,覆盖源文件 uses ComObj;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; 楼上的方法是编程实现,而且用Access里面的工具-》数据库实用工具-》压缩或修复数据库也可以实现的! to 大家&TO zzlingaaa(小舟) :俺找这东东好久了,学习一下。~~感谢! function CompactDatabase(AFileName,APassWord:string):boolean;CopactDataBase('数据库绝对路径及名称','数据库密码,没有密码不要填,否则会变成有密码的')返回值表示是否成功 删除之后要压缩数据库可以在删除后调用如下函数function CompactDatabase():boolean;//压缩与修复数据库,覆盖源文件var JE:OleVariant; ConnStr,DBPath:String; Dao: OLEVariant;begin DBPath:=ExtractFilePath(Application.ExeName); JE:=CreateOleObject('DAO.DBEngine.36'); JE.CompactDatabase(DBPath+'/BAk.mdb',DBPath+'/new.mdb'); DeleteFile(PAnsiChar(DBPath+'/BAk.mdb')); RenameFile(PAnsiChar(DBPath+'/new.mdb'),PAnsiChar('BAk.mdb'));end; delphi webbrowser1 能否设置来路 一个listbox的简单问题 菜鸟问:QuickRep过滤问题! 为什么我的自定义函数都不能用 谁用过TField的ValidChars属性?怎么用? 一个怪问题! 求一线程,用来监测ClientSocket在一段时间内有没有收到数据! 急救,关于存储过程 MaskEdit控件怎么设置浮点数输入格式? 如何在指定的位置输出指定的文字? 请问高人如何将SQLSERVER数据导出至ACCESS 请教:一个打印末能实现的问题?
//uses ComObj;
function CompactDatabase(AFileName,APassWord:string):boolean;
//压缩与修复数据库,覆盖源文件 uses ComObj;
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;
TO zzlingaaa(小舟) :
俺找这东东好久了,学习一下。~~感谢!
CopactDataBase('数据库绝对路径及名称','数据库密码,没有密码不要填,否则会变成有密码的')
返回值表示是否成功
//压缩与修复数据库,覆盖源文件
var
JE:OleVariant;
ConnStr,DBPath:String; Dao: OLEVariant;
begin
DBPath:=ExtractFilePath(Application.ExeName);
JE:=CreateOleObject('DAO.DBEngine.36');
JE.CompactDatabase(DBPath+'/BAk.mdb',DBPath+'/new.mdb');
DeleteFile(PAnsiChar(DBPath+'/BAk.mdb'));
RenameFile(PAnsiChar(DBPath+'/new.mdb'),PAnsiChar('BAk.mdb'));
end;