直接用SQL的数据库备份与恢复语句:BACKUP DATABASE,RESTORE DATABASE 我自己写的备份函数如下: Public Function DBBackup() As Boolean Dim sFile As String Dim sSQL As String Dim lTimeOut As Long Dim adoTempRS As ADODB.Recordset
On Error GoTo ErrHadller
With gDBRecordConn '本连接为ADODB.Recordset类型的连接
'函数gclsInclude.MyGetFileName的功能是得到要备份的程序文件名称,会显示保存画面 sFile = gclsInclude.MyGetFileName(False, _ "数据库备份文件 (*.BAK)|*.bak", , _ gTAppLicInfo.FileDBRestore, _ "请选择存储的数据库备份文件 ") If sFile <> "" Then '如果文件名称和路径合法的话,函数gclsInclude.MyGetFileName会返回一个非空的字符串 DoEvents '给鼠标足够的时间显示漏斗状态 Screen.MousePointer = vbHourglass '鼠标显示漏斗为忙的状态 DoEvents gclsCommon.CBNSplashShow '本函数将出现一个画面,显示备份的进度 gclsCommon.CBNSplashSetMessage "正在备份数据库" '在进度上面显示“正在备份数据库……”的文字动画 DoEvents '给函数gclsCommon.CBNSplashShow足够的时间显示文字动画 sSQL = "USE master" '使用master数据库进行工作 .Execute sSQL '同上 '看一下当前有那些系统设备在使用 gTAppLicInfo.SoftSQLDBase 数据库,其中,gTAppLicInfo.SoftSQLDBase 数据库是被备份的SQL数据库名称 Set adoTempRS = gDBRecordConn.Execute("SELECT * FROM sysdevices WHERE name = '" & gTAppLicInfo.SoftSQLDBase & "'") If adoTempRS.RecordCount = 0 Then '如果没有人在使用要备份的数据库,则建立一个类型为disk的设备,同时开辟一个备份文件名称 sSQL = "EXEC sp_addumpdevice 'disk', '" & gTAppLicInfo.SoftSQLDBase & "','" & sFile & "'" .Execute sSQL End If '由于备份的时间比较长,因此要将ADO连接gDBRecordConn的命令超时延长,但要先将以前的超时使用变量lTimeOut保存下来 lTimeOut = gDBRecordConn.CommandTimeout '根据需要将超时定为需要的值,这里是500 .CommandTimeout = 500 '开始备份数据库…… sSQL = "BACKUP DATABASE " & gTAppLicInfo.SoftSQLDBase & " TO " & gTAppLicInfo.SoftSQLDBase .Execute sSQL '备份完毕后将主ADO连接gDBRecordConn还原 sSQL = "USE " & gTAppLicInfo.SoftSQLDBase .Execute sSQL '将主ADO连接gDBRecordConn的超时设置还原 .CommandTimeout = lTimeOut '如果没有任何错误,本函数将返回TRUE DBBackup = True End If End With ErrHadller: If Err Then MsgBox Error, vbCritical '如果出错,将显示错误 End If ' Resume Next gclsCommon.CBNSplashUnload '将显示备份进度的Splash窗口卸载 gDBRecordConn.CommandTimeout = lTimeOut '还原连接的超时 Screen.MousePointer = vbNormal '鼠标显示正常 End Function
我自己写的备份函数如下:
Public Function DBBackup() As Boolean
Dim sFile As String
Dim sSQL As String
Dim lTimeOut As Long
Dim adoTempRS As ADODB.Recordset
On Error GoTo ErrHadller
With gDBRecordConn '本连接为ADODB.Recordset类型的连接
'函数gclsInclude.MyGetFileName的功能是得到要备份的程序文件名称,会显示保存画面
sFile = gclsInclude.MyGetFileName(False, _
"数据库备份文件 (*.BAK)|*.bak", , _
gTAppLicInfo.FileDBRestore, _
"请选择存储的数据库备份文件 ")
If sFile <> "" Then '如果文件名称和路径合法的话,函数gclsInclude.MyGetFileName会返回一个非空的字符串
DoEvents '给鼠标足够的时间显示漏斗状态
Screen.MousePointer = vbHourglass '鼠标显示漏斗为忙的状态
DoEvents
gclsCommon.CBNSplashShow '本函数将出现一个画面,显示备份的进度
gclsCommon.CBNSplashSetMessage "正在备份数据库" '在进度上面显示“正在备份数据库……”的文字动画
DoEvents '给函数gclsCommon.CBNSplashShow足够的时间显示文字动画
sSQL = "USE master" '使用master数据库进行工作
.Execute sSQL '同上
'看一下当前有那些系统设备在使用 gTAppLicInfo.SoftSQLDBase 数据库,其中,gTAppLicInfo.SoftSQLDBase 数据库是被备份的SQL数据库名称
Set adoTempRS = gDBRecordConn.Execute("SELECT * FROM sysdevices WHERE name = '" & gTAppLicInfo.SoftSQLDBase & "'")
If adoTempRS.RecordCount = 0 Then '如果没有人在使用要备份的数据库,则建立一个类型为disk的设备,同时开辟一个备份文件名称
sSQL = "EXEC sp_addumpdevice 'disk', '" & gTAppLicInfo.SoftSQLDBase & "','" & sFile & "'"
.Execute sSQL
End If
'由于备份的时间比较长,因此要将ADO连接gDBRecordConn的命令超时延长,但要先将以前的超时使用变量lTimeOut保存下来
lTimeOut = gDBRecordConn.CommandTimeout
'根据需要将超时定为需要的值,这里是500
.CommandTimeout = 500
'开始备份数据库……
sSQL = "BACKUP DATABASE " & gTAppLicInfo.SoftSQLDBase & " TO " & gTAppLicInfo.SoftSQLDBase
.Execute sSQL
'备份完毕后将主ADO连接gDBRecordConn还原
sSQL = "USE " & gTAppLicInfo.SoftSQLDBase
.Execute sSQL
'将主ADO连接gDBRecordConn的超时设置还原
.CommandTimeout = lTimeOut
'如果没有任何错误,本函数将返回TRUE
DBBackup = True
End If
End With
ErrHadller:
If Err Then
MsgBox Error, vbCritical '如果出错,将显示错误
End If
' Resume Next
gclsCommon.CBNSplashUnload '将显示备份进度的Splash窗口卸载
gDBRecordConn.CommandTimeout = lTimeOut '还原连接的超时
Screen.MousePointer = vbNormal '鼠标显示正常
End Function