我想通过以下的代码实现数据库的压缩问题,但是不对,错误信息为:Method 'compactdatabase' not supported by automation object.问题出在哪些地方呢?该怎么解决呀?
procedure TForm_main.compact_BitBtnClick(Sender: TObject);
var VJE:OleVariant;
con_str:string;
result:boolean;
path1:string;
path2:string;begin
opendialog2.Execute;
path1:=opendialog2.FileName;
path2:=trim(ExtractFilePath(opendialog2.FileName)); with datamodule2 do
begin
adoconnection1.Close;
adoconnection1.LoginPrompt:=false;
adoconnection1.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;User
ID=Admin;Data Source='+path1;
adoconnection1.Open;
end; con_str:=datamodule1.ADOConnection1.ConnectionString; VJE:=CreateOleObject('JRO.JetEngine');
VJE.cmpactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Path1 +';
Jet OLEDB:DataBase PassWord=''',
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Path2
+ 'Dest.mdb;Jet OLEDB:DataBase PassWord=''');
DeleteFile(Path1);
RenameFile(Path + 'Dest.mdb', Path1);end;
procedure TForm_main.compact_BitBtnClick(Sender: TObject);
var VJE:OleVariant;
con_str:string;
result:boolean;
path1:string;
path2:string;begin
opendialog2.Execute;
path1:=opendialog2.FileName;
path2:=trim(ExtractFilePath(opendialog2.FileName)); with datamodule2 do
begin
adoconnection1.Close;
adoconnection1.LoginPrompt:=false;
adoconnection1.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;User
ID=Admin;Data Source='+path1;
adoconnection1.Open;
end; con_str:=datamodule1.ADOConnection1.ConnectionString; VJE:=CreateOleObject('JRO.JetEngine');
VJE.cmpactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Path1 +';
Jet OLEDB:DataBase PassWord=''',
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Path2
+ 'Dest.mdb;Jet OLEDB:DataBase PassWord=''');
DeleteFile(Path1);
RenameFile(Path + 'Dest.mdb', Path1);end;
function CompressDataBase(AFileName,OldPassWord,NewPassWord: 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,OldPassWord]),
Format(SConnectionString,[STempFileName,NewPassWord])));
//压缩数据库
//复制并覆盖源数据库文件,如果复制失败则函数返回假,
//压缩成功但没有达到函数的功能
Result := CopyFile(PChar(STempFileName),PChar(AFileName),False);
DeleteFile(STempFileName); //删除临时文件
except
Result := False; //压缩失败
end;
end;