我用如下代码:
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,什么意思?
有谁可以跟我解释以下,在线等待!
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,什么意思?
有谁可以跟我解释以下,在线等待!
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.
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!
'注: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:把原来的数据库删掉,再重命名临时数据库为原来的数据库。
b = "Data Source=" & App.Path & "\Mac2003data_81.dat;pwd=123456;" & "Jet OLEDB:Engine Type=4"
把 Engine Type=4 去掉.
第二,注意一下 App.Path的返回值中后面是否包括有"\"号.
下面的这个是我从类用来压缩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