access问题,大家帮帮忙,谢谢

itlcx 2004-11-03 10:07:42
最近写程序用到access数据库,运行不久就发觉速度很慢,后来察觉是数据库文件太大有100多兆,
所以想方设法在程序中即时清理无用记录,但用不了多久这个数据库文件又大到100M多兆。几经
周折才发现原来access中有一个“数据压缩”的菜单命令,压缩后,100多兆文件变为3兆多。

现在的问题是压缩后3兆多的文件不久又变到100多兆。而真正存的记录绝没有那么大。
请问有没有什么方法用代码实现自动压缩,或达到此目的的别的方法?
谢谢各位同行。
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
budded 2004-11-03
  • 打赏
  • 举报
回复
呵呵,要不每次程序退出前都调用一下楼上的方法?
ksaiy 2004-11-03
  • 打赏
  • 举报
回复
在uses里加上 ComObj,ActiveX ;
uses ComObj,ActiveX ;
function CompactDatabase(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;
itlcx 2004-11-03
  • 打赏
  • 举报
回复
谢谢ksaiy(消失在人海)

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧