今天做一個(gè)恢復(fù)數(shù)據(jù)庫的程序時(shí),突然想起 sqlserver 有一個(gè)功能強(qiáng)大的組件 sqldmo ,與是查閱了一下它的相關(guān)幫助,發(fā)現(xiàn)它剛好能夠滿足我的需求:
下面是我的程序的部代碼,在這里共享組大家分享。
以下代碼在 vb6中文版中編譯通過!
啟動(dòng)數(shù)據(jù)服務(wù):
public sub start_server()
dim svr as new sqldmo.sqlserver
on error goto errhwnd
svr.start false, myserver
svr.close
exit sub
errhwnd:
if err.number <> -2147023840 then
msgbox err.number & vbcrlf & err.description, vbexclamation, "錯(cuò)誤"
end if
end sub
聯(lián)接并驗(yàn)證密碼:
public function connserver(byval sqlserver as string, byval uid as string, byval pwd as string) as boolean
dim st as sqldmo_svcstatus_type
dim svr as new sqldmo.sqlserver
on error goto errhwnd
svr.logintimeout = 10
svr.connect sqlserver, uid, pwd
connserver = true
exit function
errhwnd:
if err.number = -2147203048 then
msgbox "登錄失敗密碼不正確,請(qǐng)重新輸入!", vbinformation, "提示"
else
resume next
end if
end function
恢復(fù)數(shù)據(jù)庫時(shí)如果要重新部署數(shù)據(jù)庫特理文件位置需注意設(shè)置
恢復(fù)數(shù)據(jù)庫:
public withevents ores as sqldmo.restore '聲明事件注意此行放在過程調(diào)用之前
private sub restoredata(byval datafile as string)
on error goto errhwd
dim osql as sqldmo.sqlserver
set ores = new sqldmo.restore
set osql = new sqldmo.sqlserver
osql.loginsecure = false
osql.connect servername, sqluser, sqlpwd '聯(lián)接數(shù)據(jù)服務(wù)
ores.action = sqldmorestore_database '恢復(fù)類型數(shù)據(jù)庫
ores.database = "rcrs" '數(shù)據(jù)庫名稱
ores.replacedatabase = true '替代現(xiàn)有數(shù)據(jù)庫如不存則創(chuàng)建它
ores.files = datafile '備份文件名,如果是多個(gè)設(shè)備上的需使用.devices屬性
ores.databasefiles = datafile '數(shù)據(jù)庫文件此參數(shù)必須設(shè)置否則無法使用 relocatefiles
ores.filenumber = 1 '文件在設(shè)備上的id號(hào)如果你只有一個(gè)文件就是1
'relocatefiles 重新部署數(shù)據(jù)庫邏輯名'"[邏輯名],[物理文件名地址]"
ores.relocatefiles = "[tyrs2_data]" & "," & "[" & app.path & "/rcrs_data.mdf]," & _
"[tyrs2_log]" & "," & "[" & app.path & "/rcrs_log.ldf]"
doevents
ores.sqlrestore osql '調(diào)用恢復(fù)方法
set ores = nothing
set osql = nothing
exit sub
errhwd:
select case err.number
case -2147221499
'這個(gè)錯(cuò)誤尚不知道原因,但不影響操作結(jié)果
resume next
case -2147218403
msgbox "數(shù)據(jù)庫正在使用,請(qǐng)關(guān)閉所有正在使用數(shù)據(jù)的程序!", vbexclamation, "錯(cuò)誤"
case else
msgbox err.number & vbcrlf & err.description, vbexclamation, "提示"
end select
end sub
'恢復(fù)事件
private sub ores_percentcomplete(byval message as string, byval percent as long)
probar.value = probar.max * (percent / 100) '設(shè)置進(jìn)度條
end sub
新聞熱點(diǎn)
疑難解答
圖片精選