1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| Option Explicit
Private mSQLServer As SQLDMO.SQLServer
Private mSQLBackup As SQLDMO.Backup
Private mSQLRestore As SQLDMO.Restore
Private Sub Sauvegarder()
Set mSQLServer = New SQLDMO.SQLServer
With mSQLServer
.LoginSecure = True 'Identification Windows NT
.LoginTimeout = 30
.Connect "MonServeur", "", ""
End With
Set mSQLBackup = New SQLDMO.Backup
With mSQLBackup
.Initialize = True 'Une seule sauvegarde par support de sauvegarde
.PercentCompleteNotification = 1
.Database = "MaBase"
'Attention : il faut utiliser .ShortPath car SQLServer n'aime pas les noms avec des espaces
.Files = Fs.BuildPath(FolderSvg.ShortPath, .Database & ".bdd")
.BackupSetDescription = App.Title & " " & App.Major & "." & App.Minor & "." & App.Revision
.SQLBackup mSQLServer
End With
End Sub
Private Sub Restaurer()
Set mSQLServer = New SQLDMO.SQLServer
With mSQLServer
.LoginSecure = True 'Identification Windows NT
.LoginTimeout = 30
.Connect "MonServeur", "", ""
End With
Set mSQLRestore = New SQLDMO.Restore
With mSQLRestore
.Action = SQLDMORestore_Database
.PercentCompleteNotification = 1
.Database = "MaBase"
.Files = "Mon fichier de sauvegarde"
'Remplacement de la base de données par une autre
.ReplaceDatabase = True
'Construction de la chaine pour changer l'emplacement de la base de données
Set Rep = QueryResultToRecordset(.ReadFileList(mSQLServer))
If Not Rep Is Nothing Then
RelocateFiles = ""
Rep.Filter = "Type = 'D'" 'Seulement le fichier des données, pas le log '#SQL#
RelocateFiles = RelocateFiles & "[" & Rep!LogicalName & "],[" & Rep!PhysicalName & "]," & _
"[" & Rep!LogicalName & "],[" & Trim(mSQLServer.Databases(.Database).FileGroups(1).DBFiles(1).PhysicalName) & "]"
Rep.Filter = "Type = 'L'" 'Seulement le log '#SQL#
RelocateFiles = RelocateFiles & ","
RelocateFiles = RelocateFiles & "[" & Rep!LogicalName & "],[" & Rep!PhysicalName & "]," & _
"[" & Rep!LogicalName & "],[" & Trim(mSQLServer.Databases(.Database).TransactionLog.LogFiles(1).PhysicalName) & "]"
.RelocateFiles = RelocateFiles
End If
.SQLRestore mSQLServer
End With
End Sub
Public Function QueryResultToRecordset(ByRef QueryResults As SQLDMO.QueryResults) As ADODB.Recordset
Dim rsResults As ADODB.Recordset
Dim CptCol As Long
Dim CptRow As Long
If QueryResults.Columns = 0 Then
Set QueryResultToRecordset = Nothing
Exit Function
End If
'Création du recordset
Set rsResults = New ADODB.Recordset
For CptCol = 1 To QueryResults.Columns
rsResults.Fields.Append QueryResults.ColumnName(CptCol), adVarChar, QueryResults.ColumnMaxLength(CptCol) + 2
Next CptCol
'Ajout des enregistrements
rsResults.CursorLocation = adUseClient
rsResults.Open , Nothing, adOpenKeyset, adLockOptimistic
For CptRow = 1 To QueryResults.Rows
rsResults.AddNew
For CptCol = 1 To QueryResults.Columns
Select Case QueryResults.ColumnType(CptCol)
Case -7 ' SQLDMO_DTypeBit => booléen
rsResults.Fields(CptCol - 1) = IIf(QueryResults.GetColumnBool(CptRow, CptCol), 1, 0)
Case Else
rsResults.Fields(CptCol - 1) = QueryResults.GetColumnString(CptRow, CptCol)
End Select
Next
rsResults.Update
Next CptRow
Set QueryResultToRecordset = rsResults
Exit Function
End Function |
Partager