ACCESS CompactDataBase问题,在线等

lancechu 2009-03-07 03:17:19
function CompactDataBase(const AFileName: String): Boolean;
var
AccessEngine :DBEngine;
tempFile : string;
begin
Result := True;
Exit;
Result := False;
AccessEngine:=CoDBEngine.Create;
if FileExists(AFileName) then
begin
try
// AccessEngine:=CoDbEngine.Create;
tempFile := extractfilepath(AFileName)+'tempback.mdb';
if FileExists(tempFile) then
deletefile(tempFile)
else
begin
AccessEngine.CompactDatabase(AFileName,tempFile,'',0,'');
DeleteFile(AFileName);
renameFile(tempFile,AFileName);
end;
except
application.messagebox('压缩失败!','',mb_ok+mb_iconstop);
raise;
end;
Result := True;
end;
end;
//环境:delphi7.0 + access 7.0
经测试在我的机器上没有问题,到客户机器上
AccessEngine.CompactDatabase(AFileName,tempFile,'',0,'');
执行不过去,单元中引用了DAO97
...全文
419 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghhole 2011-05-16
  • 打赏
  • 举报
回复
学习学习!!!

谢谢4楼的!!!

好强好强!!!
oushengfen 2009-03-09
  • 打赏
  • 举报
回复
DAO97是Access97的代码了,如果是2000格式,则可能不成功,用4楼的代码吧
duoduo168 2009-03-07
  • 打赏
  • 举报
回复
lz我给你发一个可以用的吧,这个是我之前做项目用过的。

function CompactDatabase(AFileName, APassWord: string):boolean;
//压缩与修复数据库,覆盖源文件.需要在头文件增加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(254,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;

如果数据库没有密码,可以传个空字符串给APassWord参数。
bdmh 2009-03-07
  • 打赏
  • 举报
回复
报什么错,是不是缺少驱动
lancechu 2009-03-07
  • 打赏
  • 举报
回复
function CompactDataBase(const AFileName: String): Boolean;
var
AccessEngine :DBEngine;
tempFile : string;
begin
Result := False;
AccessEngine:=CoDBEngine.Create;
if FileExists(AFileName) then
begin
try
// AccessEngine:=CoDbEngine.Create;
tempFile := extractfilepath(AFileName)+'tempback.mdb';
if FileExists(tempFile) then
deletefile(tempFile)
else
begin
AccessEngine.CompactDatabase(AFileName,tempFile,'',0,'');
DeleteFile(AFileName);
renameFile(tempFile,AFileName);
end;
except
application.messagebox('压缩失败!','',mb_ok+mb_iconstop);
raise;
end;
Result := True;
end;
end;
//环境:delphi7.0 + access 7.0
经测试在我的机器上没有问题,到客户机器上
AccessEngine.CompactDatabase(AFileName,tempFile,'',0,'');
执行不过去,单元中引用了DAO97
lancechu 2009-03-07
  • 打赏
  • 举报
回复
Result := True;
Exit;
这两句我忘记注释掉了
function CompactDataBase(const AFileName: String): Boolean;
var
AccessEngine :DBEngine;
tempFile : string;
begin
Result := False;
AccessEngine:=CoDBEngine.Create;
if FileExists(AFileName) then
begin
try
// AccessEngine:=CoDbEngine.Create;
tempFile := extractfilepath(AFileName)+'tempback.mdb';
if FileExists(tempFile) then
deletefile(tempFile)
else
begin
AccessEngine.CompactDatabase(AFileName,tempFile,'',0,'');
DeleteFile(AFileName);
renameFile(tempFile,AFileName);
end;
except
application.messagebox('压缩失败!','',mb_ok+mb_iconstop);
raise;
end;
Result := True;
end;
end;
//环境:delphi7.0 + access 7.0
经测试在我的机器上没有问题,到客户机器上
AccessEngine.CompactDatabase(AFileName,tempFile,'',0,'');
执行不过去,单元中引用了DAO97

2,497

社区成员

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

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