急迫和真诚的请教大侠们一个问题:在delphi中如何解决access数据库自动膨胀的问题? 我在用delhpi编程的过程中发现每运行一次程序access数据库就会自动膨胀一些,但这时并没有向数据库中添加数据,在access中可以手工解决这一问题,但如何在程序中解决这一问题呢?敬请大侠们不吝赐教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 >>在access中可以手工解决这一问题????運行一段時間, 就壓縮一次數據庫了 在access中是可以手工解决,但在程序中如何实现呢?运行一段时间后也不会自己压缩阿! 运行一段时间,压缩一下,或退出时候自动压缩。function TForm1.CompactDatabase(AFileName: string): boolean;const SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Password=XXXXXX;' + 'User ID=XXXXXX;' + 'Data Source=%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, [AFileName1]), format(SConnectionString, [STempFileName, AFileName1]))); //压缩数据库 //复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有达到函数的功能 result := CopyFile(PChar(STempFileName), PChar(AFileName), false); DeleteFile(STempFileName); //删除临时文件 except result := false; //压缩失败 end;end; AFileName是要压缩的数据库文件名 function CompactDatabase(AFileName,APassWord:string):boolean;var STempFileName:string; vJE:OleVariant;begin STempFileName:=GetTempPathFileName; try vJE:=CreateOleObject('JRO.JetEngine'); vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]), format(SConnectionString,[STempFileName,APassWord])); result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); DeleteFile(STempFileName); except result:=false; end;end; 测试通过use Variants,ComObj;...procedure TForm1.Button1Click(Sender: TObject);var dao:OLEVariant;begin adoconnection1.Close;//压缩是以独占方式进行的;压缩前要关闭数据库连接。 screen.Cursor:=crHourGlass; dao:=CreateOleObject('DAO.DBEngine.36');//access2000要用dao3.6,在access97上用35和36都可以 dao.CompactDatabase('TestDB1.mdb','temp.mdb'); DeleteFile('TestDB1.mdb'); RenameFile('temp.mdb','TestDB1.mdb'); adoconnection1.Open; screen.Cursor:=crDefault; Showmessage('本地数据库压缩完成');end; 请问miky大侠:我在刚才运行了您给的那个函数,系统提示:Undeclared identifier'CreateOleObject'和Undeclared identifier'OleCheck'这是怎么回事呢? 谢谢诸位大侠,尤其是samcrm,我的问题解决了,用的是samcrm大虾提供的程序,现在结帖! delphi7 打印问题 问一个简单的问题! 求助!怎么截取字符串的后五位? 导出到excel问题(急啊) Fieldbyname().asboolean 对应的SQL server中的数据类型是什么?(是否为bit) Delphi 5升级到Delphi 2010的问题 想做一个单机版的程序,不知道用什么数据库好,请教各位! 送分!急!!!有一功能不知,请见多识广者帮忙! 如何通过stream方式把*.bmp文件转换为jpg格式后直接存入数据库? 高手请进!关于U盘病毒新变种之文件夹杀手Delphi造源码 异构数据库的相互转换! 请教快速升级攻略。
????運行一段時間, 就壓縮一次數據庫了
const
SConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;Password=XXXXXX;' +
'User ID=XXXXXX;' +
'Data Source=%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, [AFileName1]), format(SConnectionString, [STempFileName, AFileName1]))); //压缩数据库
//复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有达到函数的功能
result := CopyFile(PChar(STempFileName), PChar(AFileName), false);
DeleteFile(STempFileName); //删除临时文件
except
result := false; //压缩失败
end;
end;
var
STempFileName:string;
vJE:OleVariant;
begin
STempFileName:=GetTempPathFileName;
try
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord]));
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);
except
result:=false;
end;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
dao:OLEVariant;
begin
adoconnection1.Close;//压缩是以独占方式进行的;压缩前要关闭数据库连接。
screen.Cursor:=crHourGlass;
dao:=CreateOleObject('DAO.DBEngine.36');//access2000要用dao3.6,在access97上用35和36都可以
dao.CompactDatabase('TestDB1.mdb','temp.mdb');
DeleteFile('TestDB1.mdb');
RenameFile('temp.mdb','TestDB1.mdb');
adoconnection1.Open;
screen.Cursor:=crDefault;
Showmessage('本地数据库压缩完成');
end;