我的程序片断:
procedure TDM.ADOConnectionAfterDisconnect(Sender: TObject);
var
Eng: DBEngine;
begin
//压缩数据库
Eng := CoDBEngine.Create;
Eng.CompactDatabase('Prison.mdb','tem.~db','',0,'');
DeleteFile(GetCurrentDIR + '\Prison.mdb');
RenameFile(GetCurrentDIR + '\tem.~db', GetCurrentDIR + '\Prison.mdb');
end;而且我已经Uses了DAO2000了。运行时总是报告“无效的参数量”,咋解决呢?
procedure TDM.ADOConnectionAfterDisconnect(Sender: TObject);
var
Eng: DBEngine;
begin
//压缩数据库
Eng := CoDBEngine.Create;
Eng.CompactDatabase('Prison.mdb','tem.~db','',0,'');
DeleteFile(GetCurrentDIR + '\Prison.mdb');
RenameFile(GetCurrentDIR + '\tem.~db', GetCurrentDIR + '\Prison.mdb');
end;而且我已经Uses了DAO2000了。运行时总是报告“无效的参数量”,咋解决呢?
sourcefiles,tempfiles:string;
begin
form_flat;
if messagebox(mainform.handle,'確定要壓縮嗎?','壓縮',mb_yesno)<>idyes then exit;
data1.Database1.Connected:=false;
sourcefiles:=extractfilepath(application.exename)+'\Prison.mdb';
tempfiles:=extractfilepath(application.exename)+'\Prison.~mdb';
try
X:=createoleobject('dao.dbEngine.36');
x.CompactDatabase(sourcefiles,tempfiles,'',0,';pwd=');
deletefile(sourcefiles);
renamefile(tempfiles,sourcefiles);
if fileExists(sourcefiles) and FileExists(tempfiles) then
if deleteFile(sourcefiles)then RenameFile(tempfiles,sourcefiles);
close;
except
Messagedlg('數據庫正打開!',mtwarning,[mbok],0);
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;
试试
用Server面板上的TAccessApplication能干的了吗?