我用如下代码:
Dim je As New JRO.JetEngine
Dim a As String
Dim b As String
a = "Data Source=" & App.Path & "\Mac2003data_80.dat;pwd=123456"
b = "Data Source=" & App.Path & "\Mac2003data_81.dat;pwd=123456;" & "Jet OLEDB:Engine Type=4"je.CompactDatabase a, b但是报错,说找不到可安装的ISAM,什么意思?
有谁可以跟我解释以下,在线等待!

解决方案 »

  1.   

    Mac2003data_80.dat这样的文件系统无法确认
      

  2.   

    参考一下
    Compact and repair databases in ADOIn a previous tip (Compact and repair Jet databases with DAO), we showed you how to compact and repair a database with DAO. However, if you're using ADO, you can also compact and repair Access databases using Jet and Replication Objects (JRO).
    To take advantage of JRO's CompactDatabase method, which will also repair the database, set a reference the JRO library, Microsoft Jet And Replication Objects 2.1 Library. Next, declare and set a JetEngine object variable, like so
    Dim JRO As JRO.JetEngineSet JRO = New JRO.JetEngine
    JRO.CompactDatabase _"Provider=Microsoft.Jet.OLEDB.4.0;" _& "Data Source=C:\myData1.mdb", _"Provider=Microsoft.Jet.OLEDB.4.0;" _& "Data Source=C:\myDataNewName.mdb"_& ";Jet OLEDB:Engine Type=4"
    This command follows similar syntax as DAO's CompactDatabase method-you must provide the old database name and the new database name. In the case of JRO, however, you must also provide a valid connection string, as well as indicate the type of Jet engine to compact the database as. We used 4 to create a Jet Version 3.x database suitable for Access 97 users. If you work with Access 2000 use the value 5 to create a Jet Version 4.x database.
      

  3.   

    用 ADO 來压缩或修复 Microsoft Access 文件以前使用 DAO 時,Microsoft 有提供 CompactDatabase Method 來压缩 Microsoft Access 文件,RepairDatabase Method 來修复损坏的 Microsoft Access 文件,。可是自从 ADO 出來之后,好像忘了提供相对的压缩及修复 Microsoft Access 文件的功能。現在 Microsoft 发现了这个问题了,也提供了解決方法,不过有版本上的限制!限制說明如下:ActiveX Data Objects (ADO), version 2.1 
    Microsoft OLE DB Provider for Jet, version 4.0 這是 Microsoft 提出的 ADO 的延伸功能:Microsoft Jet OLE DB Provider and Replication Objects (JRO)这个功能在 JET OLE DB Provider version 4.0 (Msjetoledb40.dll) 及 JRO version 2.1 (Msjro.dll) 中第一次被提出!
    這些必要的 DLL 文件在您安裝了 MDAC 2.1 之后就有了,您可以在以下的网页中下载 MDAC 的最新版本!Universal Data Access Web Site在下载之前先到 VB6 中檢查一下,【控件】【設定引用項目】中的 Microsoft Jet and Replication Objects X.X library 如果已经是 2.1 以上的版本,您就可以不用下载了!在您安裝了 MDAC 2.1 或以上的版本之后,您就可以使用 ADO 來压缩或修复 Microsoft Access 文件,下面的步骤告訴您如何使用 CompactDatabase Method 來压缩 Microsoft Access 文件:1、新建一個新表单,选择功能表中的【控件】【設定引用項目】。
    2、加入 Microsoft Jet and Replication Objects X.X library,其中 ( X.X 大于或等于 2.1 )。
    3、在适当的地方加入以下的程序代码,記得要修改 data source 的內容及目地文件的路径:Dim jro As jro.JetEngine
    Set jro = New jro.JetEngine
    jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb", _ '來源文件
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc2.mdb;Jet OLEDB:Engine Type=4" '目的文件在 DAO 3.60 之后,RepairDatabase Method 已经无法使用了,以上的程序代码显示了 ADO CompactDatabase Method 的用法,而它也取代了 DAO 3.5 時的 RepairDatabase method!
      

  4.   

    首先“工程”->“引用”,选中“microsoft jet and replication objects 2.X library”
    '注:X为版本号
    '压缩数据库
    Public Function CompDatabase() As Boolean
        On Error GoTo ErrMsg
        Dim JRO As New JRO.JetEngine
        Dim tempDBPath As String
        Dim conStr1 As String, conStr2 As String
        Dim i As Integer
        
        If MsgBox("你确定要压缩当前数据库吗?", vbQuestion + vbOKCancel + vbDefaultButton2, "小心!") = vbCancel Then
           Exit Function
        End If
        
        Screen.MousePointer = 11
        
        For i = Len(MdbSourcePath) To 1 Step -1
            If Mid(MdbSourcePath, i, 1) = "\" Then
                tempDBPath = Left(MdbSourcePath, i) & "tempDocument.mdb"
                Exit For
            End If
        Next i
        
        If Dir(tempDBPath) <> "" Then
            Kill tempDBPath
        End If
        
        conStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & MdbSourcePath & ";jet oledb:database password=982348935843435"
        conStr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tempDBPath & ";jet oledb:database password=982348935843435"
        
        con.Close '先关闭全局连接
        JRO.CompactDatabase conStr1, conStr2
        
        Kill MdbSourcePath
        Name tempDBPath As MdbSourcePath
        
        ConnectDatabase con '再开启全局连接
        
        Screen.MousePointer = 0
        
        MsgBox "数据库压缩成功", vbInformation + vbOKOnly, "祝贺"
        CompDatabase = True
        Exit Function
    ErrMsg:
        Screen.MousePointer = 0
        CompDatabase = False
        MsgBox "请确保其它应用程序没有使用当前数据库!" & vbCrLf & Err.Description & "然后关闭其它所有子窗体后再恢复!", vbInformation + vbOKOnly, "提示"
        CheckConnection con
    End Function
    “microsoft jet and replication objects 2.* library”这个库具有压缩数据库的功能。
    JRO.CompactDatabase conStr1, conStr2的作用是把数据库压缩到一个临时的数据库中。
    Kill MdbSourcePath 和 Name tempDBPath As MdbSourcePath:把原来的数据库删掉,再重命名临时数据库为原来的数据库。
      

  5.   

    第一.问题可能在这一句:
    b = "Data Source=" & App.Path & "\Mac2003data_81.dat;pwd=123456;" & "Jet OLEDB:Engine Type=4"
    把 Engine Type=4 去掉.
    第二,注意一下 App.Path的返回值中后面是否包括有"\"号.
      

  6.   

    问题多半是这一句,大多数找不到ISAM的错误都是连接的字符串格式有问题引起的。比如Data Source=... 后面用pwd=...就很可疑,应该用Pass Word=...的吧?偶忘了具体的,不过肯定应该是跟前面配对使用的。
      

  7.   

    如果不是根目录,则APP.PATH返回值中没有"\",如果是根目录,则APP.PATH 的返回值中有"\".
      

  8.   


    下面的这个是我从类用来压缩MDB数据库的函数.你可能借鉴一下.'压缩MDB数据库
    '函数名:ZipMdb
    '参数:P_Cnn ADODB连接,SourFileName 源文件名,ObjFileName 目标文件名,
    '     Provider Provider参数(视JET版而定,默认是4.0),UserID 用户名,
    '     UserPwd 密码
    '返回值:TRUE 成功,FALSE 失败.
    Public Function ZipMdb(P_Cnn As ADODB.Connection, _
                           MdbFileName As String, _
                           Optional Provider As String = "Microsoft.Jet.OLEDB.4.0", _
                           Optional UserID As String = "admin", _
                           Optional UserPwd As String = "") As Boolean
        
        Dim Yjro As New JRO.JetEngine
        Dim WorkPath As String
        Dim TmpName As String
        Dim FileCon As SmFileCls
         
        On Error Resume Next
        '/关闭连接
        P_Cnn.Close: Set P_Cnn = Nothing
        DoEvents
        WorkPath = FileCon.FilePath(MdbFileName)
        TmpName = WorkPath & "mdbTmp.bak"
        '/-------------------------------
        DoEvents
        '/压缩
        Yjro.CompactDatabase "Provider=" & Provider & MdbFileName & ";" & _
                             "Jet OLEDB:Database Password=" & UserPwd & ";" & _
                             "User ID=" & UserID & ";", _
                             "Provider=" & Provider & ";Data Source=" & TmpName & ";" & _
                             "Jet OLEDB:Database Password=" & UserPwd & ";" & _
                             "User ID=" & UserID & ";"
        DoEvents
        '/删除旧文件,将压缩后的文件COPY到旧位置
        If FileCon.FileOccur(MdbFileName) And FileCon.FileOccur(TmpName) Then
            Kill MdbFileName
            DoEvents
            Call FileCopy(TmpName, MdbFileName)
            DoEvents
            Kill TmpName
            DoEvents
            '/重新连接
            Call CreateMdbConn(P_Cnn, MdbFileName, , UserID, UserPwd)
        Else
            Err.Number = -1
        End If
        Set Yjro = Nothing
        Set FileCon = Nothing
        Err.Clear
        ZipMdb = (Err.Number = 0)
    End Function