'先引用 microsoft jet and replication objects 2.6 library'恢复和备份MDB数据库 '函数名:BakResumeMdb '参数:P_Cnn ADODB连接,SourFileName 源文件名,ObjFileName 目标文件名, ' Provider Provider参数(视JET版而定,默认是4.0),UserID 用户名, ' UserPwd 密码,WorkType 操作类型(0 备份,1 恢复) '返回值:TRUE 成功,FALSE 失败. '注:当WorkType=0时,源文件名是要备份文件,目标文件名是备份文件. ' 当WorkType=1时,源文件名是备份文件,目标文件名要恢复的文件.Public Function BakResumeMDB(P_Cnn As ADODB.Connection, _ SourFileName As String, _ ObjFileName As String, _ Optional Provider As String = "Microsoft.Jet.OLEDB.4.0", _ Optional UserID As String = "admin", _ Optional UserPwd As String = "", _ Optional WorkType As Long = 0) As Boolean
Dim Yjro As New JRO.JetEngine Dim WorkPath As String Dim FileCon As New SmFileCls
On Error Resume Next '/关闭连接 P_Cnn.Close: Set P_Cnn = Nothing DoEvents '/------------------------------- '/压缩 Yjro.CompactDatabase "Provider=" & Provider & SourFileName & ";" & _ "Jet OLEDB:Database Password=" & UserPwd & ";" & _ "User ID=" & UserID & ";", _ "Provider=" & Provider & ";Data Source=" & ObjFileName & ";" & _ "Jet OLEDB:Database Password=" & UserPwd & ";" & _ "User ID=" & UserID & ";" DoEvents '/删除旧文件,将压缩后的文件COPY到旧置 If Not (FileCon.FileOccur(SourFileName) And FileCon.FileOccur(ObjFileName)) Then If WorkType = 0 Then '/备份 Call CreateMdbConn(P_Cnn, SourFileName, , UserID, UserPwd) Else '/压缩 Call CreateMdbConn(P_Cnn, ObjFileName, , UserID, UserPwd) End If Err.Number = -1 End If Set FileCon = Nothing Set Yjro = Nothing: Err.Clear BakResumeMDB = (Err.Number = 0) End Function ' '创建一个连接(连接到ACCESS) '函数名:CreateMdbConn '参数: DbConnection ADODB连接,MdbPath ACCESS数据库路径,Provider JET引擎版本,UserID 登录用户名,UserWord 登录密码 '返回值:TRUE 连接成功.FALSE 连接失败. '例: CreateMdbConn p_cnn,"C:\DEMO.MDB","sa","123"Public Function CreateMdbConn(ByRef DbConnection As ADODB.Connection, _ MdbPath As String, _ Optional Provider = "Microsoft.Jet.OLEDB.4.0;", _ Optional UserID As String = "admin", _ Optional UserWord As String = "") As Boolean Dim ConStr As String
On Error Resume Next
If DbConnection.State = adStateOpen And Not IsEmpty(adStateOpen) Then DbConnection.Close End If '/------------------------------------------------------------------ ConStr = "Provider=" & Provider & _ "Data Source=" & MdbPath & ";" & _ "Jet OLEDB:Database Password=" & UserWord & ";" & _ "User ID=" & UserID & ";"
DbConnection.ConnectionString = ConStr DbConnection.Open DoEvents If Err.Number = 0 Then CreateMdbConn = True Else Err.Clear CreateMdbConn = False End If End Function
用Copy就可以了。
'函数名:BakResumeMdb
'参数:P_Cnn ADODB连接,SourFileName 源文件名,ObjFileName 目标文件名,
' Provider Provider参数(视JET版而定,默认是4.0),UserID 用户名,
' UserPwd 密码,WorkType 操作类型(0 备份,1 恢复)
'返回值:TRUE 成功,FALSE 失败.
'注:当WorkType=0时,源文件名是要备份文件,目标文件名是备份文件.
' 当WorkType=1时,源文件名是备份文件,目标文件名要恢复的文件.Public Function BakResumeMDB(P_Cnn As ADODB.Connection, _
SourFileName As String, _
ObjFileName As String, _
Optional Provider As String = "Microsoft.Jet.OLEDB.4.0", _
Optional UserID As String = "admin", _
Optional UserPwd As String = "", _
Optional WorkType As Long = 0) As Boolean
Dim Yjro As New JRO.JetEngine
Dim WorkPath As String
Dim FileCon As New SmFileCls
On Error Resume Next
'/关闭连接
P_Cnn.Close: Set P_Cnn = Nothing
DoEvents
'/-------------------------------
'/压缩
Yjro.CompactDatabase "Provider=" & Provider & SourFileName & ";" & _
"Jet OLEDB:Database Password=" & UserPwd & ";" & _
"User ID=" & UserID & ";", _
"Provider=" & Provider & ";Data Source=" & ObjFileName & ";" & _
"Jet OLEDB:Database Password=" & UserPwd & ";" & _
"User ID=" & UserID & ";"
DoEvents
'/删除旧文件,将压缩后的文件COPY到旧置
If Not (FileCon.FileOccur(SourFileName) And FileCon.FileOccur(ObjFileName)) Then
If WorkType = 0 Then
'/备份
Call CreateMdbConn(P_Cnn, SourFileName, , UserID, UserPwd)
Else
'/压缩
Call CreateMdbConn(P_Cnn, ObjFileName, , UserID, UserPwd)
End If
Err.Number = -1
End If
Set FileCon = Nothing
Set Yjro = Nothing: Err.Clear
BakResumeMDB = (Err.Number = 0)
End Function
'
'创建一个连接(连接到ACCESS)
'函数名:CreateMdbConn
'参数: DbConnection ADODB连接,MdbPath ACCESS数据库路径,Provider JET引擎版本,UserID 登录用户名,UserWord 登录密码
'返回值:TRUE 连接成功.FALSE 连接失败.
'例: CreateMdbConn p_cnn,"C:\DEMO.MDB","sa","123"Public Function CreateMdbConn(ByRef DbConnection As ADODB.Connection, _
MdbPath As String, _
Optional Provider = "Microsoft.Jet.OLEDB.4.0;", _
Optional UserID As String = "admin", _
Optional UserWord As String = "") As Boolean
Dim ConStr As String
On Error Resume Next
If DbConnection.State = adStateOpen And Not IsEmpty(adStateOpen) Then
DbConnection.Close
End If
'/------------------------------------------------------------------
ConStr = "Provider=" & Provider & _
"Data Source=" & MdbPath & ";" & _
"Jet OLEDB:Database Password=" & UserWord & ";" & _
"User ID=" & UserID & ";"
DbConnection.ConnectionString = ConStr
DbConnection.Open
DoEvents If Err.Number = 0 Then
CreateMdbConn = True
Else
Err.Clear
CreateMdbConn = False
End If
End Function