我想压缩一个access2000数据库,用DAO和ADO都试过了,总是压缩不了,不知道是什么原因.
在VB工程库中,已经加入了DAO3.6和Microsoft Jet and Replication Objects 2.6 Library,所用的语句分别为:DAO:
DBEngine.CompactDatabase Location, strTempFile, ";pwd=123456"
ADO:
Dim JRO As New JRO.JetEngine
conStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Location & ";Jet OLEDB:Database Password=123456"
conStr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strTempFile & ";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Password=123456"
JRO.CompactDatabase conStr1, conStr2上面Location为源数据库地址,strTempFile为目标数据库地址.在进行单步调试的过程中,运行到压缩语句是就出现错误,没有给出错误的类型.
我的操作系统为XP,VB的版本为SP5.
请问这是怎么回事?

解决方案 »

  1.   

    Dim Jro1 As JRO.JetEngine
      Set Jro1 = New JRO.JetEngine
      '当运行第二次以上时先删除临时文件
      SSS = Dir(App.Path + "\tmp.mdb")
      If SSS = "tmp.mdb" Then
        Kill App.Path + "\tmp.mdb"
      End If
      
      Jro1.CompactDatabase _
      "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\aaa.mdb;Persist Security Info=False;Jet OLEDB:Database Password=***", _
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\tmp.mdb;Jet OLEDB:Database Password=***" '目的文件
        
      Kill App.Path + "\aaa.mdb"
      Name App.Path + "\tmp.mdb" As App.Path + "\aaa.mdb"
      
      MsgBox "压缩成功!", vbInformation
      

  2.   

    删除临时文件的操作我也有,只是没有写出来,而且根据我的调试过程来看,可能是引用的连接库有问题,因为开始的时候用DAO3.6的方法压缩成功了,可是后来又不行了,代码我都没有修改过,所以很不明白这其中的问题.
      

  3.   

    经过不断尝试,已经解决了问题,用DAO:
    DBEngine.CompactDatabase Location, strTempFile,,, ";pwd=123456"
      

  4.   

    ADO的压缩是:
    jro.CompactDatabase _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\source.mdb" _
    ";Jet OLEDB:Database Password=pwd", _   
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\target.mdb;Jet OLEDB:Engine Type=5" _
    ;Jet OLEDB:Database Password=pwd" 
    这样子的
      

  5.   

    也碰到过和搂主相似的问题,压缩可以解决,但是用Vb+access2000时,修复功能好像不能用了,还有就是用dao压缩时,打包安装时报错:
    安装程序无法创建一下文件夹%CommonFiles%\Microsoft Share\DAO
    是在Xp下安装的,2000下安装没出错,不知道是什么原因
    不知你打包安装时是不是很顺利:)
    up
      

  6.   

    '需要引用Microsoft Jet and Replication Objects 2.6 Library(msjro.dll)Set Cn = Nothing
    Set Rs = Nothing
    Set Rspx = NothingDim JRO As JRO.JetEngine
    Dim DataPath, Prov, Pwd, Strsource, Strtarget As String
    Dim k As BooleanSet JRO = New JRO.JetEngineDataPath = App.PathIf Not Right(DataPath, 1) = "\" Then    DataPath = DataPath + "\"
        
    End IfIf CheckFileExist(DataPath + "Nd_Main.mdb") = True Then    '检查文件是否存在    Prov = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
        Pwd = ";Jet OLEDB:Database Password=ndrsgl"
        Strsource = Prov & DataPath & "Nd_Main.mdb" & Pwd
        Strtarget = Prov & DataPath & "Nd_Main_bak.mdb" & Pwd & ";Jet OLEDB:Engine Type=5"
        JRO.CompactDatabase Strsource, Strtarget
        
        ' 删除原来的数据库文件    Kill DataPath + "Nd_Main.mdb"
        
        ' 更改备份后的文件到原名
        
        Name DataPath + "Nd_Main_bak.mdb" As DataPath + "Nd_Main.mdb"
        
        Msg = "       恭  喜  !!!" & Chr(13) & "" & Chr(13) & "数  据  库  压  缩  成  功  !"
        Style = vbOKOnly + vbInformation + vbDefaultButton1
        Title = "系 统 提 示 !"
        Response = MsgBox(Msg, Style, Title)
        
    End If
    '检查文件是否存在,存在返回 TRUE,否则返回FALSE
    Public Function CheckFileExist(strFile As String) As BooleanIf Dir(strFile, vbDirectory) <> "" Then    CheckFileExist = True
    Else
        CheckFileExist = False
    End IfEnd Function