设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2529|回复: 0
打印 上一主题 下一主题

VB6_SQL数据库备份模块

[复制链接]

16

主题

0

好友

216

积分

中级会员

Rank: 3Rank: 3

生肖
性别

最佳新人 论坛元老

跳转到指定楼层
楼主
发表于 2012-4-28 21:30:29 |只看该作者 |倒序浏览
本帖最后由 fieldmax 于 2012-4-28 22:15 编辑

  1. '*************************************************************************
  2. '**模 块 名:fBackupDatabase_a
  3. '**描    述:备份数据库,返回出错信息,正常恢复,返回""
  4. '**调    用:fBackupDatabase_a "备份文件名","数据库名"
  5. '**参数说明:
  6. '**          sBackUpfileName  恢复后的数据库存放目录
  7. '**          sDataBaseName    备份的数据名
  8. '**          sIsAddBackup     是否追加到备份文件中
  9. '**说    明:引用Microsoft ActiveX Data Objects 2.x Library
  10. '**创 建 人:邹建
  11. '**日    期:2003年12月09日
  12. '*************************************************************************
  13. Public Function fBackupDatabase_a(ByVal sBackUpfileName$ _
  14.                                 , ByVal sDataBaseName$ _
  15.                                 , Optional ByVal sIsAddBackup As Boolean = False _
  16.                                 ) As String

  17.     Dim iDb As ADODB.Connection
  18.     Dim iConcStr$, iSql$, iReturn$

  19.     On Error GoTo lbErr

  20.     '创建对象
  21.     Set iDb = New ADODB.Connection

  22.     '连接数据库服务器,根据你的情况修改连接字符串
  23.     iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj"
  24.     iDb.Open iConcStr

  25.     '生成数据库备份语句
  26.     iSql = "backup database [" & sDataBaseName & "]" & vbCrLf & _
  27.             "to disk='" & sBackUpfileName & "'" & vbCrLf & _
  28.             "with description='" & "zj-backup at:" & Date & "(" & Time & ")'" & vbCrLf & _
  29.             IIf(sIsAddBackup, "", ",init")

  30.     iDb.Execute iSql
  31.     GoTo lbExit

  32. lbErr:
  33.     iReturn = Error
  34. lbExit:
  35.     fBackupDatabase_a = iReturn
  36. End Function

  37. '*************************************************************************
  38. '**模 块 名:frestoredatabase_a
  39. '**描    述:恢复数据库,返回出错信息,正常恢复,返回""
  40. '**调    用:frestoredatabase_a "备份文件名","数据库名"
  41. '**参数说明:
  42. '**          sDataBasePath  恢复后的数据库存放目录
  43. '**          sBackupNumber  是从那个备份号恢复
  44. '**          sReplaceExist  指定是否覆盖已经存在的数据
  45. '**说    明:引用Microsoft ActiveX Data Objects 2.x Library
  46. '**创 建 人:邹建
  47. '**日    期:2003年12月09日
  48. '*************************************************************************
  49. Public Function fRestoreDatabase_a(ByVal sBackUpfileName$ _
  50.                                 , ByVal sDataBaseName$ _
  51.                                 , Optional ByVal sDataBasePath$ = "" _
  52.                                 , Optional ByVal sBackupNumber& = 1 _
  53.                                 , Optional ByVal sReplaceExist As Boolean = False _
  54.                                 ) As String

  55.     Dim iDb As ADODB.Connection, iRe As ADODB.Recordset
  56.     Dim iConcStr$, iSql$, iReturn$, iI&

  57.     On Error GoTo lbErr

  58.     '创建对象
  59.     Set iDb = New ADODB.Connection
  60.     Set iRe = New ADODB.Recordset

  61.     '连接数据库服务器,根据你的情况修改连接字符串
  62.     iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj"
  63.     iDb.Open iConcStr

  64.     '得到还原后的数据库存放目录,如果没有指定,存放到SQL SERVER的DATA目录
  65.     If sDataBasePath = "" Then
  66.         iSql = "select filename from master..sysfiles"
  67.         iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
  68.         iSql = iRe(0)
  69.         iRe.Close
  70.         sDataBasePath = Left(iSql, InStrRev(iSql, "\"))
  71.     End If

  72.     '检查数据库是否存在
  73.     If sReplaceExist = False Then
  74.         iSql = "select 1 from master..sysdatabases  where name='" & sDataBaseName & "'"
  75.         iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
  76.         If iRe.EOF = False Then
  77.             iReturn = "数据库已经存在!"
  78.             iRe.Close
  79.             GoTo lbExit
  80.         End If
  81.         iRe.Close
  82.     End If

  83.     '关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败
  84.     iSql = "select spid from master..sysprocesses where dbid=db_id('" & sDataBaseName & "')"
  85.     iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
  86.     While iRe.EOF = False
  87.         iSql = "kill " & iRe(0)
  88.         iDb.Execute iSql
  89.         iRe.MoveNext
  90.     Wend
  91.     iRe.Close

  92.     '获取数据库恢复信息
  93.     iSql = "restore filelistonly from disk='" & sBackUpfileName & "'" & vbCrLf & _
  94.         "with file=" & sBackupNumber
  95.     iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly

  96.     '生成数据库恢复语句
  97.     iSql = "restore database [" & sDataBaseName & "]" & vbCrLf & _
  98.         "from disk='" & sBackUpfileName & "'" & vbCrLf & _
  99.         "with file=" & sBackupNumber & vbCrLf
  100.     With iRe
  101.         While Not .EOF
  102.             iReturn = iRe("PhysicalName")
  103.             iI = InStrRev(iReturn, ".")
  104.             iReturn = IIf(iI = 0, "", Mid(iReturn, iI)) & "'"
  105.             iSql = iSql & ",move '" & iRe("LogicalName") & _
  106.                     "' to '" & sDataBasePath & sDataBaseName & iReturn & vbCrLf
  107.             .MoveNext
  108.         Wend
  109.         .Close
  110.     End With
  111.     iSql = iSql & IIf(sReplaceExist, ",replace", "")

  112.     iDb.Execute iSql
  113.     iReturn = ""
  114.     GoTo lbExit

  115. lbErr:
  116.     iReturn = Error
  117. lbExit:
  118.     fRestoreDatabase_a = iReturn
  119. End Function
复制代码
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏0 评分评分
您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-4-27 13:52 , Processed in 0.118662 second(s), 27 queries .

回顶部