*********************************************************
'* 名稱:BackupDatabase
'* 功能:備份數(shù)據(jù)庫
'* 控件:一個文本框和兩個按鈕(備份到和確定)
'*********************************************************
Public Sub BackupDatabase()
Dim cn As New ADODB.Connection
Dim s_path, s_dataexport As String
s_path = App.Path
Me.MousePointer = 11? ?'設(shè)置鼠標(biāo)指針形狀
'student1是需要備份的數(shù)據(jù)庫名稱
s_dataexport = "backup database student1 to disk='" + CommonDialog1.FileName + "'"
cn.Open "driver={sql server};server=" & d1 & ";database=student1;persist security info=false; userid=sa"??'數(shù)據(jù)庫連接字符串
'這里不需要連接master數(shù)據(jù)庫,即可完成備份
cn.BeginTrans
cn.Execute s_dataexport
Err.Number = 0
If Err.Number = 0 Then
? ? cn.CommitTrans
? ? MsgBox "數(shù)據(jù)備份成功!", vbInformation, "提示"
? ? MsgBox "數(shù)據(jù)備份文件存放路徑:" & CommonDialog1.FileName, vbOKOnly, "提示"
? ? Unload Me
Else
? ? cn.RollbackTrans
? ? MsgBox "數(shù)據(jù)備份失敗!請檢查數(shù)據(jù)庫是否正在打開!", vbCritical, "提示"
End If
cn.Close
Set cn = Nothing
Me.MousePointer = 1
End Sub
'*********************************************************
'* 名稱:RestoreDataBase
'* 功能:還原數(shù)據(jù)庫
'* 控件:一個文本框和兩個按鈕( 打開和確定)
'*********************************************************
Public Sub RestoreDataBase()
If Text1.Text = "" Then
? ? MsgBox "請選擇要恢復(fù)的數(shù)據(jù)文件!", vbInformation, "提示"
? ? Exit Sub
Else
? ? ret = MsgBox("數(shù)據(jù)恢復(fù)操作將會覆蓋以前的所有數(shù)據(jù)并且覆蓋后無法恢復(fù),您確定要進(jìn)行恢復(fù)操作嗎?", vbQuestion + vbOKCancel, "提示")
? ? If ret = vbOK Then
? ?? ? Dim cn As New ADODB.Connection
? ?? ? Dim sn As New ADODB.Recordset
? ?? ? Dim s_restore As String
? ?? ? Me.MousePointer = 11
? ?? ? cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;server=" & d1 & ";Initial Catalog=master;Data Source=127.0.0.1;user id=sa;password=" & d3 & ""
? ?? ? sn.Open "select??spid??from??sysprocesses??where??dbid=db_id('student1')", cn
? ?? ???Do While Not sn.EOF
? ?? ?? ? cn.Execute "kill " & sn("spid")
? ?? ?? ? sn.MoveNext
? ?? ???Loop
? ?? ???sn.Close
? ?? ???s_restore = "restore database student1 from disk='" + Trim(Text1.Text) + "'??with REPLACE"
? ?? ???cn.Execute s_restore
? ?? ?? ?'Debug.Print gs_conn_string
? ?? ?? ?'此時需要連接master數(shù)據(jù)庫才能完成數(shù)據(jù)恢復(fù)操作
? ?? ?? ?'同上student1為需要恢復(fù)的數(shù)據(jù)庫
? ?? ???s_restore = "restore database student1 from disk='" + Trim(Text1.Text) + "'"
? ?? ?? ?'text1一個用于記錄需要恢復(fù)文件的地址的textbox
? ?? ???cn.Execute s_restore
? ?? ???cn.BeginTrans
? ?? ???If Err.Number = 0 Then
? ?? ?? ?? ?cn.CommitTrans
? ?? ?? ?? ?MsgBox "數(shù)據(jù)恢復(fù)成功!", vbInformation, "提示"
? ?? ?? ?? ?Command1.Enabled = True
? ?? ?? ?? ?Label1.Visible = False
? ?? ???Else
? ?? ?? ?? ?cn.RollbackTrans
? ?? ?? ?? ?MsgBox "數(shù)據(jù)恢復(fù)失敗!", vbCritical, "提示"
? ?? ?? ?? ?Command1.Enabled = True
? ?? ???End If
? ?? ???cn.Close
? ?? ???Set cn = Nothing
? ?? ???Me.MousePointer = 1
? ? Else
? ?? ???Exit Sub
? ? End If? ?? ?? ?? ?? ?? ?? ? '''''''''''''''''''''''''''''''''''''''''
? ? On Error Resume Next
? ? Dim DBC As New DataBaseConnection
? ? If db.State = 1 Then
? ?? ? db.Close
? ? End If
? ? db.ConnectionString = DBC.SqlConnectString(d1, d2, d3)
? ? rs.CursorType = adOpenDynamic
? ? rs.CursorLocation = adUseClient
? ? rs.LockType = adLockOptimistic
? ? db.CursorLocation = adUseClient
? ? db.Open
? ? Set cmd.ActiveConnection = db
? ? If Err.Number Then
? ?? ? MsgBox Err.Description, 16 + vbOKOnly, Err.Number
? ?? ? Exit Sub
? ? End If
? ? db.DefaultDatabase = "student1"
? ? If Err.Number Then
? ?? ? MsgBox Err.Description, 16 + vbOKOnly, Err.Number
? ?? ? Exit Sub
? ? End If
End If
End Sub? ?? ?? ?? ?? ?? ?? ? '''''''''''''''''''''''''''''''''''''''''''''
posted on 2007-01-13 21:25
飛鳥 閱讀(1438)
評論(4) 編輯 收藏 所屬分類:
VB