我刚才又试了下,新建一个工程,在窗体上放置一个命令按钮Command1代码: Private Sub Command1_Click() Shell "command.com /c copy 工程1.exe 工程1.bak" End Sub生成工程1.exe,运行,按下按钮后即在当前路径下产生一个工程1.bak的文件
'备份数据 Public Function BackupMDB() As Boolean On Error GoTo ErrLab BackupMDB = False
Screen.MousePointer = 11
If CopyFile(MdbSourcePath, MdbBackupPath, False) = 0 Then Screen.MousePointer = 0 MsgBox "备份失败!" & vbCrLf & "请确保其它应用程序没有使用当前数据库!" & vbCrLf & "然后关闭其它所有子窗体后再备份!", vbInformation, "提示" Else Screen.MousePointer = 0 BackupMDB = True MsgBox "备份成功!", vbInformation, "祝贺" End If Exit Function ErrLab: Screen.MousePointer = 0 MsgBox "发生意外错误!请稍后再试" & vbCrLf & Err.Description, vbInformation + vbOKOnly, "消息" End Function'恢复数据库 Public Function RestoreMDB() As Boolean On Error Resume Next Dim tempCon As ADODB.Connection Dim tempRs As ADODB.Recordset RestoreMDB = True If MsgBox("该操作把当前数据库替换为之前备份过的数据库。执行之后将不可撤消!" & vbCrLf & "您确定要恢复当前数据库吗?", vbQuestion + vbOKCancel + vbDefaultButton2, "小心!") = vbCancel Then Exit Function End If
Set tempCon = New ADODB.Connection Set tempRs = New ADODB.Recordset
tempCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & MdbBackupPath & ";jet oledb:database password=kdsfjkd" tempRs.Open "Select * from Document", tempCon, adOpenStatic, adLockOptimistic If Err.Number <> 0 Then MsgBox "以前尚未备份过,或者已经备份的数据库已被破坏,不能进行恢复!", vbInformation, "提示信息" Else '关闭连接 tempRs.Close tempCon.Close Set tempCon = Nothing
con.Close '先关闭全局连接
If CopyFile(MdbBackupPath, MdbSourcePath, False) = 0 Then MsgBox "请确保其它应用程序没有使用当前数据库!" & vbCrLf & vbCrLf & _ "然后关闭其它所有子窗体后再恢复!", vbInformation, "恢复失败" Else MsgBox "恢复成功!", vbInformation, "祝贺" End If
ConnectDatabase con '再开启全局连接 End If End Function
'引用JRO.压缩备份/恢复/修复数据库' '恢复和备份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.FileCheck(SourFileName) And FileCon.FileCheck(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
Private Sub Command1_Click()
Shell "command.com /c copy 工程1.exe 工程1.bak"
End Sub生成工程1.exe,运行,按下按钮后即在当前路径下产生一个工程1.bak的文件
Public Function BackupMDB() As Boolean
On Error GoTo ErrLab
BackupMDB = False
Screen.MousePointer = 11
If CopyFile(MdbSourcePath, MdbBackupPath, False) = 0 Then
Screen.MousePointer = 0
MsgBox "备份失败!" & vbCrLf & "请确保其它应用程序没有使用当前数据库!" & vbCrLf & "然后关闭其它所有子窗体后再备份!", vbInformation, "提示"
Else
Screen.MousePointer = 0
BackupMDB = True
MsgBox "备份成功!", vbInformation, "祝贺"
End If
Exit Function
ErrLab:
Screen.MousePointer = 0
MsgBox "发生意外错误!请稍后再试" & vbCrLf & Err.Description, vbInformation + vbOKOnly, "消息"
End Function'恢复数据库
Public Function RestoreMDB() As Boolean
On Error Resume Next
Dim tempCon As ADODB.Connection
Dim tempRs As ADODB.Recordset
RestoreMDB = True If MsgBox("该操作把当前数据库替换为之前备份过的数据库。执行之后将不可撤消!" & vbCrLf & "您确定要恢复当前数据库吗?", vbQuestion + vbOKCancel + vbDefaultButton2, "小心!") = vbCancel Then
Exit Function
End If
Set tempCon = New ADODB.Connection
Set tempRs = New ADODB.Recordset
tempCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & MdbBackupPath & ";jet oledb:database password=kdsfjkd"
tempRs.Open "Select * from Document", tempCon, adOpenStatic, adLockOptimistic
If Err.Number <> 0 Then
MsgBox "以前尚未备份过,或者已经备份的数据库已被破坏,不能进行恢复!", vbInformation, "提示信息"
Else
'关闭连接
tempRs.Close
tempCon.Close
Set tempCon = Nothing
con.Close '先关闭全局连接
If CopyFile(MdbBackupPath, MdbSourcePath, False) = 0 Then
MsgBox "请确保其它应用程序没有使用当前数据库!" & vbCrLf & vbCrLf & _
"然后关闭其它所有子窗体后再恢复!", vbInformation, "恢复失败"
Else
MsgBox "恢复成功!", vbInformation, "祝贺"
End If
ConnectDatabase con '再开启全局连接
End If
End Function
'恢复和备份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.FileCheck(SourFileName) And FileCon.FileCheck(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