adaptive server anywhere(本文中簡(jiǎn)稱asa) 是powerbuilder(本文中簡(jiǎn)稱pb)自帶的數(shù)據(jù)庫(kù)管理系統(tǒng),可作為小型應(yīng)用系統(tǒng)的數(shù)據(jù)庫(kù)服務(wù)器。而數(shù)據(jù)庫(kù)的備份/恢復(fù)是一項(xiàng)基本的工作,要想用短短幾分鐘就完成這類程序的編寫,能做到嗎?本文就將為大家介紹一個(gè)用pb編寫的asa備份/恢復(fù)程序,只需很短的時(shí)間,就可以編制完成并運(yùn)用在以asa作為數(shù)據(jù)環(huán)境的小型應(yīng)用上。
一 備份程序
先來(lái)看看備份程序部分的寫法。在窗體上建一文本框 sle_1,用來(lái)顯示備份的文件名,并添加兩個(gè)按鈕:cb_1(瀏覽)、cb_2(備份)。相應(yīng)的事件代碼如下:
//cb_1.clicked()
string fname,name
getfilesavename('保存',fname,name,“db”,'數(shù)據(jù)庫(kù)備份文件(*.1),*.1')
sle_1.text=fname
//cb_2.clicked()
string mysql,bfname
bfname=trim(sle_1.text)
bfname=left(bfname,len(bfname)-2)
mysql=“backup database to '”+bfname+“'”
execute immediate :mysql using sqlca;//運(yùn)用sql語(yǔ)句立刻執(zhí)行備份
if sqlca.sqlcode=0 then
messagebox(“信息提示”,'備份成功!',information!,ok!)//給出備份成功與否的相關(guān)信息
else
messagebox(“信息提示”,'備份失敗!',information!,ok!)
end if
二 恢復(fù)程序
再來(lái)看看恢復(fù)數(shù)據(jù)庫(kù)程序的編寫。在窗體上建一文本框 sle_1,顯示用來(lái)恢復(fù)的備份文件名,并添加兩個(gè)按鈕:cb_1(查找)、cb_2(恢復(fù))。聲明一個(gè)修改文件屬性的api函數(shù):
function ulong setfileattributes(ref string lpfilename,ulong dwfileattributes) library “kernel32.dll” alias for “setfileattributesa”
相應(yīng)的事件代碼如下:
//cb_1.clicked()
string fname,name
getfileopenname('查找',fname,name,“1”,“數(shù)據(jù)庫(kù)備份文件(*.1),*.1”)
sle_1.text=fname
//cb_2.clicked()
string mysql,bfname,gzname
ulong sxz=32,kb //sxz為文件的屬性值,32表示可讀寫
boolean tmp
bfname=trim(sle_1.text)
bfname=left(bfname,len(bfname)-2)
// d: lgz 為示例中數(shù)據(jù)庫(kù)文件所在目錄,tmp.db為臨時(shí)的數(shù)據(jù)庫(kù)文件
mysql=“restore database 'd: lgz/tmp.db' from '”+bfname+“'”
execute immediate :mysql using sqlca;//同樣是運(yùn)用sql語(yǔ)句來(lái)立刻執(zhí)行恢復(fù)數(shù)據(jù)庫(kù)的工作
if sqlca.sqlcode<>0 then
messagebox(“信息提示”,'數(shù)據(jù)恢復(fù)失敗!',information!,ok!)
return
end if
disconnect; //斷開數(shù)據(jù)庫(kù)連接
gzname='d: lgz/gz.db' //包含路徑的數(shù)據(jù)庫(kù)文件
setfileattributes(gzname,sxz) // 去掉只讀屬性
tmp=filedelete('d: lgz/gz.db') //刪除恢復(fù)前的數(shù)據(jù)庫(kù)
if tmp=false then
messagebox(“信息提示”,'備份失敗!',information!,ok!)
return
end if
//將臨時(shí)的數(shù)據(jù)庫(kù)復(fù)制到當(dāng)前的數(shù)據(jù)庫(kù)文件上
bfname=“d: lgz/tmp.db”
gzname=“d: lgz/gz.db”
kb=filecopy(bfname,gzname,true )
if kb=1 then
messagebox(“信息提示”,'數(shù)據(jù)庫(kù)恢復(fù)成功!',information!,ok!)
else
messagebox(“信息提示”,'數(shù)據(jù)庫(kù)復(fù)制失敗!',information!,ok!)
return
end if
filedelete('d: lgz/tmp.db') //刪除臨時(shí)的數(shù)據(jù)庫(kù)文件
connect;
三 小結(jié)
程序備份和恢復(fù)的實(shí)現(xiàn)都只是調(diào)用了sql內(nèi)置的功能來(lái)實(shí)現(xiàn),使程序顯得相對(duì)簡(jiǎn)潔。功能雖然比較單一和簡(jiǎn)單,卻也能滿足數(shù)據(jù)庫(kù)的備份和恢復(fù)的工作需求,在要求不高的應(yīng)用場(chǎng)合可為數(shù)據(jù)庫(kù)管理人員節(jié)約大量精力。上述程序在 pb 9.0中調(diào)試通過(guò)。