动态创建、压缩Access在引用部分加入
use ComObj;1、OLE方式创建数据库
procedure TOfficeForm.SpeedButton1Click(Sender:TObject);
var
  CreateAccess:OleVariant;
begin
  //通过建立ADOX(Microsoft ActiveX(R) Data Objects Extensions)对象进行访问
  CreateAccess:=CreateOleObject('ADOX.Catalog');
  //通过OLE方式创建Access97格式的数据库
  CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\Access97.mdb');
  //通过OLE方式创建Access2000格式的数据库
  CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Access2000.mdb');
end;2、通过OLE方式压缩Access97及Access2000格式的数据库
procedure TOfficeForm.spOLECompactClick(Sender:TObject);
var
  CompactAccess:OleVariant;
begin
  //通过建立JRO(Microsoft Jet and Replication Objects)对象进行访问
  CompactAccess:=CreateOleObject('JRO.JetEngine');
  //通过OLE方式压缩Access97格式的数据库
  CompactAccess.CompactDatabase('Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\Access97.mdb','Provider=Micosoft.Jet.OLEDB.3.51;Data Source=c:\Access97Back.mdb;Jet OLEDB:Encrypt Database=True');
  //删除旧的数据库文件
  DeleteFile('c:\Access97.mdb');
  //将压缩后的数据库文件改回原名
  RenameFile('c:\Access97Back.mdb','c:\Access97.mdb');
  //通过OLE方式压缩Access2000格式的数据库
  ComPactAccess.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Access2000.mdb','Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Access2000Back.mdb;Jet OLEDB:Encrypt Database=True');
  DeleteFile('c:\Access2000.mdb');
  RenameFile('c:\Access2000Back.mdb','c:\Access2000.mdb');
end;

解决方案 »

  1.   

    hamzsy(十二真空间)用你的方法,会出现“类没有注册”的错误。
      

  2.   

    你是否已经把Jet Engine, 经 'Import Type Library' 导入到Delphi中, 
    Delphi需要事先登记有关的注册.
      

  3.   

    用DAO压不行吗function TransData.DaoActive(var DaoObject:OleVariant):Boolean;
    begin
      Result:=False;
      try
        DaoObject:=GetActiveOleObject('DAO.DBEngine.36');
        Result:=True;
      except
        try
          DaoObject:=CreateOleObject('DAO.DBEngine.36');
          Result:=True;
        except
          DaoObject:=Null;
        end;
      end;
    end;function TransData.DaoCompactDB(const FileName:string):Boolean;
    var
      accesssdb:OleVariant;
      TempFile:string;
    begin
      Result:=False;
      try
        if not DaoActive(accesssdb) then
          Exit;
        try
          TempFile:=ExtractFilePath(FileName)+'Temp.mdb';
          accesssdb.CompactDatabase(FileName,TempFile);
          DeleteFile(FileName);
          RenameFile(TempFile,FileName);
          Result:=True;
        except
          on E:EOleException do
            ShowMessage(E.Message);
        end
      finally
        accesssdb:=Unassigned;
      end;
    end;
      

  4.   

    你是否已经把Jet Engine, 经 'Import Type Library' 导入到Delphi中, 
    Delphi需要事先登记有关的注册.
      

  5.   

    你是否已经把Jet Engine, 经 'Import Type Library' 导入到Delphi中, 
    Delphi需要事先登记有关的注册.
      

  6.   

    你是否已经把Jet Engine, 经 'Import Type Library' 导入到Delphi中, 
    Delphi需要事先登记有关的注册.