procedure TForm22.CompactAccess(dbName :string;JetId:string='4.0');
var
AVariant :Variant;
begin
  if FileExists(dbName+'.tmp') then DeleteFile(DbName+'.tmp');   //是否存在相同的.tmp的临时文件,有则删了
 AVariant := CreateOleObject('JRO.JetEngine');
  AVariant.CompactDataBase('Provider=Microsoft.Jet.OLEDB.'+JetId+';Jet OLEDB:Database Password=hjp;Data Source='+
  dbName,
    'Provider=Microsoft.Jet.OLEDB.'+JetId+';Data Source='+dbName+'.tmp');
    DeleteFile(DbName);
    ReNameFile(dbName+'.tmp',DbName);        //把文件名改回来end;
上面的是个压缩access数据库过程
我用access数据库做了个小程序
里面有压缩,备份,报表等功能
做完后,我把access数据库打
开了,然后压缩就不能用了,
说以排它方式打开,我把报表那里的ADO连接改为false就OK
了,但是报表不能用!怎么解决都能用的问题
前提,不再重新把数据库搞一遍!

解决方案 »

  1.   

    Access本来就是以独占方式打开的你把那个Ado设置为true不就行了?我不是高手,也许我说错了呢
      

  2.   

    在报表时动态改变连接设置ado为true,在压缩等工作时设置ado为false,因为不独占打开数据库是绝对不能压缩备份的。我绝对不是高手。
      

  3.   

    楼上的两位不是高手都能解决问题?你们太谦虚了阿
    access是以独占的方式打开的,所以在你压缩数据库的时候你要把连接断开,然后再压缩。
      

  4.   

    如果先CLOSE后OPEN的话,会有压缩路径的问题