home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 4_2005-2006.ISO / data / Zips / MS_Sql_Dat19490811172005.psc / ClsSQLDMO.cls < prev    next >
Text File  |  2005-11-11  |  11KB  |  419 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "ClsSQLDMO"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14.  
  15.  
  16. Option Explicit
  17.  
  18. '
  19. ' This simple class will help You implementing an SQL Server (and MSDE)
  20. ' backup/restore, the class uses the object library SQLDMO to interact
  21. ' with the native SQLsrv backup/restore functions so You'll need to
  22. ' reference that object library.
  23. '
  24. ' It must be noticed that (if backing up on a file), the specified path
  25. ' is interpreted as "local" to the machine where the SQL server resides
  26. ' unless the path is specified in UNC notation, so if from a client You
  27. ' specify "c:\sqlbk\somefile.bak", the file will be created into the
  28. ' "sqlbk" folder of the machine running the SQL server and *not* on the
  29. ' client machine, while using "\\client\sqlbk\somefile.bak" will achieve
  30. ' the needed result
  31. '
  32.  
  33. ' device
  34. Private Const BACKUP_DEVICE = "DMO_BKP_DEV"
  35.  
  36. ' properties
  37. Private msSQLserver As String ' Server name/address
  38. Private msSQLuser As String ' user ID
  39. Private msSQLpassword As String ' Password
  40. Private msDataBase As String ' db name
  41. Private msBackupFile As String ' backup file (pathname)
  42. Private msBackupName As String ' backup set name
  43. Private msBackupDescription As String ' backup set description
  44. Private mbReplaceDatabase As Boolean ' true=creates/recreates db
  45.  
  46. Private mcolServers As Collection ' SQL server list
  47. Private mcolDataBases As Collection ' database list
  48.  
  49. ' SQL DMO
  50. Private WithEvents moSRV As sqldmo.SQLserver
  51. Attribute moSRV.VB_VarHelpID = -1
  52. Private WithEvents moBAK As sqldmo.Backup
  53. Attribute moBAK.VB_VarHelpID = -1
  54. Private WithEvents moRST As sqldmo.Restore
  55. Attribute moRST.VB_VarHelpID = -1
  56. Private moDEV As sqldmo.BackupDevice
  57.  
  58. ' events
  59. Public Event ServerMessage(ByVal sMessage As String)
  60. Public Event BackupProgress(ByVal sMessage As String, ByVal lPercent As Long)
  61. Public Event BackupCompleted(ByVal sMessage As String)
  62. Public Event RestoreProgress(ByVal sMessage As String, ByVal lPercent As Long)
  63. Public Event RestoreCompleted(ByVal sMessage As String)
  64. Public Event InsertMedia(ByVal sMessage As String)
  65. Public Event Failure(ByVal sSource As String, ByVal lCode As Long, ByVal sMessage As String)
  66.  
  67. ' init
  68. Private Sub Class_Initialize()
  69. Set mcolServers = New Collection
  70. Set mcolDataBases = New Collection
  71. End Sub
  72.  
  73. ' reset
  74. Private Sub Class_Terminate()
  75. On Local Error Resume Next
  76. moBAK.Abort
  77. Set moBAK = Nothing
  78. moSRV.Disconnect
  79. Set moSRV = Nothing
  80. Set mcolDataBases = Nothing
  81. End Sub
  82.  
  83. '::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
  84. ':: Properties
  85. '::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
  86.  
  87. ' SQL server
  88. Public Property Let SQLserver(ByVal sName As String)
  89. msSQLserver = sName
  90. End Property
  91.  
  92. ' user id
  93. Public Property Let SQLuser(ByVal sUser As String)
  94. msSQLuser = sUser
  95. End Property
  96.  
  97. ' password
  98. Public Property Let SQLpassword(ByVal sPass As String)
  99. msSQLpassword = sPass
  100. End Property
  101.  
  102. ' database
  103. Public Property Let DataBase(ByVal sName As String)
  104. msDataBase = sName
  105. End Property
  106.  
  107. ' backup file path\name
  108. Public Property Let BackupFile(ByVal sPathName As String)
  109. msBackupFile = sPathName
  110. End Property
  111.  
  112. ' backup set name
  113. Public Property Let BackupName(ByVal sName As String)
  114. msBackupName = sName
  115. End Property
  116.  
  117. ' backup set description
  118. Public Property Let BackupDescription(ByVal sDescr As String)
  119. msBackupDescription = sDescr
  120. End Property
  121.  
  122. ' Let restore create/recreate DB
  123. Public Property Let ReplaceDatabase(ByVal bYesNo As Boolean)
  124. mbReplaceDatabase = bYesNo
  125. End Property
  126.  
  127. ' Number of known servers
  128. Public Property Get ServerCount() As Long
  129. On Local Error Resume Next
  130. ServerCount = mcolServers.Count
  131. End Property
  132.  
  133. ' N-th server name
  134. Public Property Get ServerName(ByVal lIndex As Long) As String
  135. On Local Error Resume Next
  136. ServerName = mcolServers(lIndex)
  137. End Property
  138.  
  139. ' Number of existing DBs
  140. Public Property Get DataBaseCount() As Long
  141. On Local Error Resume Next
  142. DataBaseCount = mcolDataBases.Count
  143. End Property
  144.  
  145. ' Name of N-th DB
  146. Public Property Get DataBaseName(ByVal lIndex As Long) As String
  147. On Local Error Resume Next
  148. DataBaseName = mcolDataBases(lIndex)
  149. End Property
  150.  
  151.  
  152. '::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
  153. ':: Methods
  154. '::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
  155.  
  156. ' Loads servers list
  157. Public Function LoadServerList() As Long
  158. Dim oSL As NameList, iSRV As Integer
  159.  
  160. On Local Error GoTo Catch
  161. Set mcolServers = New Collection
  162. Set oSL = sqldmo.ListAvailableSQLServers()
  163. For iSRV = 1 To oSL.Count
  164. mcolServers.Add oSL(iSRV)
  165. Next iSRV
  166.  
  167. BailOut:
  168. On Local Error Resume Next
  169. Set oSL = Nothing
  170. LoadServerList = mcolServers.Count
  171. Exit Function
  172.  
  173. Catch:
  174. RaiseEvent Failure(Err.Source, Err.Number, Err.Description)
  175. Set mcolServers = New Collection
  176. Resume BailOut
  177. End Function
  178.  
  179. ' Loads DB list for a given server
  180. Public Function LoadDBlist() As Long
  181. Dim iDB As Long
  182.  
  183. On Local Error GoTo Catch
  184. LoadDBlist = 0
  185. Set mcolDataBases = New Collection
  186. If PingServer() = False Then
  187. Exit Function
  188. End If
  189.  
  190. Set moSRV = New sqldmo.SQLserver
  191. moSRV.Connect msSQLserver, msSQLuser, msSQLpassword
  192. moSRV.Databases.Refresh
  193. For iDB = 1 To moSRV.Databases.Count
  194. mcolDataBases.Add moSRV.Databases(iDB).Name
  195. Next iDB
  196.  
  197. BailOut:
  198. On Local Error Resume Next
  199. moSRV.Disconnect
  200. LoadDBlist = mcolDataBases.Count
  201. Exit Function
  202.  
  203. Catch:
  204. RaiseEvent Failure(Err.Source, Err.Number, Err.Description)
  205. Set mcolDataBases = New Collection
  206. Resume BailOut
  207. End Function
  208.  
  209. ' Backup
  210. Public Function Backup() As Boolean
  211. Dim bRet As Boolean, sDev As String
  212.  
  213. On Local Error GoTo Catch
  214. bRet = False
  215.  
  216. ' Connect...
  217. If PingServer() = False Then
  218. Exit Function
  219. End If
  220. moSRV.Connect msSQLserver, msSQLuser, msSQLpassword
  221.  
  222. ' Remove device
  223. On Local Error Resume Next
  224. sDev = BACKUP_DEVICE
  225. moSRV.BackupDevices.Remove sDev
  226.  
  227. ' Add device
  228. On Local Error GoTo Catch
  229. Set moDEV = New sqldmo.BackupDevice
  230. With moDEV
  231. .Name = sDev
  232. .Type = SQLDMODevice_DiskDump
  233. .PhysicalLocation = msBackupFile
  234. End With
  235. moSRV.BackupDevices.Add moDEV
  236.  
  237. ' Run backup
  238. If Len(msBackupName) < 1 Then
  239. msBackupName = "BKP" & Year(Now) & Right("00" & Month(Now), 2) & Right("00" & Day(Now), 2)
  240. End If
  241. If Len(msBackupDescription) < 1 Then
  242. msBackupDescription = "Backup " & msDataBase & " (" & Format(Now, "Short Date") & " " & Format(Now, "Long Time") & ")"
  243. End If
  244. Set moBAK = New sqldmo.Backup
  245. With moBAK
  246. .DataBase = msDataBase
  247. .Devices = sDev
  248. .TruncateLog = SQLDMOBackup_Log_Truncate
  249. .BackupSetName = msBackupName
  250. .BackupSetDescription = msBackupDescription
  251. .PercentCompleteNotification = 10
  252. .SQLBackup moSRV
  253. End With
  254. bRet = True
  255.  
  256. BailOut:
  257. On Local Error Resume Next
  258. ' cleanup
  259. If bRet = False Then
  260. moBAK.Abort
  261. End If
  262. Set moBAK = Nothing
  263. moSRV.BackupDevices.Remove sDev
  264. moSRV.Disconnect
  265. Set moSRV = Nothing
  266. Backup = bRet
  267. Exit Function
  268.  
  269. Catch:
  270. ' error !
  271. bRet = False
  272. RaiseEvent Failure(Err.Source, Err.Number, Err.Description)
  273. Resume BailOut
  274. End Function
  275.  
  276. ' Restore
  277. Public Function Restore() As Boolean
  278. Dim bRet As Boolean, sDev As String
  279.  
  280. On Local Error GoTo Catch
  281. bRet = False
  282.  
  283. ' Connect to server
  284. If PingServer() = False Then
  285. Exit Function
  286. End If
  287. moSRV.Connect msSQLserver, msSQLuser, msSQLpassword
  288.  
  289. ' Remove device
  290. On Local Error Resume Next
  291. sDev = BACKUP_DEVICE
  292. moSRV.BackupDevices.Remove sDev
  293.  
  294. ' Add device
  295. On Local Error GoTo Catch
  296. Set moDEV = New sqldmo.BackupDevice
  297. With moDEV
  298. .Name = sDev
  299. .Type = SQLDMODevice_DiskDump
  300. .PhysicalLocation = msBackupFile
  301. End With
  302. moSRV.BackupDevices.Add moDEV
  303.  
  304. ' Restore
  305. Set moRST = New sqldmo.Restore
  306. With moRST
  307. .DataBase = msDataBase
  308. .Devices = sDev
  309. .ReplaceDatabase = mbReplaceDatabase
  310. .PercentCompleteNotification = 10
  311. .SQLRestore moSRV
  312. End With
  313. bRet = True
  314.  
  315. BailOut:
  316. On Local Error Resume Next
  317. ' cleanup
  318. If bRet = False Then
  319. moRST.Abort
  320. End If
  321. Set moRST = Nothing
  322. moSRV.BackupDevices.Remove sDev
  323. moSRV.Disconnect
  324. Set moSRV = Nothing
  325. Restore = bRet
  326. Exit Function
  327.  
  328. Catch:
  329. ' error !
  330. bRet = False
  331. RaiseEvent Failure(Err.Source, Err.Number, Err.Description)
  332. Resume BailOut
  333. End Function
  334.  
  335. '::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
  336. ':: Service function (class internal use)
  337. '::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
  338.  
  339. ' creates an instance of the "SQLServer" object and verifies
  340. ' if that server is reachable using the "SQLping" function
  341. Private Function PingServer() As Boolean
  342. Dim vVer As SQLDMO_SQL_VER
  343. Dim bRet As Boolean
  344.  
  345. On Local Error Resume Next
  346. bRet = False
  347. Set moSRV = New sqldmo.SQLserver
  348. vVer = moSRV.PingSQLServerVersion(msSQLserver, msSQLuser, msSQLpassword)
  349. If vVer <> SQLDMOSQLVer_Unknown Then
  350. bRet = True
  351. Else
  352. Set moSRV = Nothing
  353. End If
  354. If bRet = False Then
  355. RaiseEvent Failure("SQLbackup", -1, "Can't " & Chr(34) & "ping" & Chr(34) & " specified server (" & msSQLserver & ")")
  356. End If
  357. PingServer = bRet
  358. End Function
  359.  
  360. '::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
  361. ':: Events from DMO object, reflected to class consumers
  362. '::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::
  363.  
  364. ' backup complete
  365. Private Sub moBAK_Complete(ByVal Message As String)
  366. RaiseEvent BackupCompleted(Message)
  367. End Sub
  368.  
  369. ' new media
  370. Private Sub moBAK_NextMedia(ByVal Message As String)
  371. RaiseEvent InsertMedia(Message)
  372. End Sub
  373.  
  374. ' % complete
  375. Private Sub moBAK_PercentComplete(ByVal Message As String, ByVal Percent As Long)
  376. RaiseEvent BackupProgress(Message, Percent)
  377. End Sub
  378.  
  379. ' restore complete
  380. Private Sub moRST_Complete(ByVal Message As String)
  381. RaiseEvent RestoreCompleted(Message)
  382. End Sub
  383.  
  384. ' new media
  385. Private Sub moRST_NextMedia(ByVal Message As String)
  386. RaiseEvent InsertMedia(Message)
  387. End Sub
  388.  
  389. ' % complete
  390. Private Sub moRST_PercentComplete(ByVal Message As String, ByVal Percent As Long)
  391. RaiseEvent RestoreProgress(Message, Percent)
  392. End Sub
  393.  
  394. ' command
  395. Private Sub moSRV_CommandSent(ByVal SQLCommand As String)
  396. RaiseEvent ServerMessage("Command sent: " & SQLCommand)
  397. End Sub
  398.  
  399. ' connection broken
  400. Private Function moSRV_ConnectionBroken(ByVal Message As String) As Boolean
  401. RaiseEvent Failure("SQLDMO", 0, "Connection Broken: " & Message)
  402. End Function
  403.  
  404. ' query timeout
  405. Private Function moSRV_QueryTimeout(ByVal Message As String) As Boolean
  406. RaiseEvent Failure("SQLDMO", 0, "Query Timeout: " & Message)
  407. End Function
  408.  
  409. ' login error
  410. Private Sub moSRV_RemoteLoginFailed(ByVal Severity As Long, ByVal MessageNumber As Long, ByVal MessageState As Long, ByVal Message As String)
  411. RaiseEvent Failure("SQLDMO", MessageNumber, "Remote Login Failed: " & Message)
  412. End Sub
  413.  
  414. ' message/warning/error
  415. Private Sub moSRV_ServerMessage(ByVal Severity As Long, ByVal MessageNumber As Long, ByVal MessageState As Long, ByVal Message As String)
  416. RaiseEvent ServerMessage(Message)
  417. End Sub
  418.  
  419.