我想通过以下的代码实现数据库的压缩问题,但是不对,错误信息为: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;

解决方案 »

  1.   

    更改:错误信息如下‘format of the initialization string does not conform the OLE DB specification.'
      

  2.   

    uses ComObj;//压缩与修复数据库,覆盖源文件,顺便修改密码
    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;