在眾多的數據庫應用開發平台中PowerBuilder作為一個強大的圖形Client/Server數據庫應用程序開發工具而得到廣泛使用本文將向讀者詳細介紹在PB開發的數據庫應用程序中實現可監控數據備份的具體解決方案
PowerBuilder是當今數據庫應用程序中常用的開發工具之一開發者能用它來建立用戶容易使用的各種數據庫應用程序PB內部定義的函數種類繁多並允許開發者修改其數據庫當然PB的部分功能也存在著不足
在數據庫系統中數據備份是一種最為常用也極其重要的功能在數據庫DBMS環境下我們可以直接調用數據庫本身提供的圖形化或命令行式的備份命令進行備份而在PB中卻只能使用Run ( string { windowstate } )的格式調用DOS下的命令而這種方法的一個重要弊端就是數據庫備份的成功與否只能在DOS窗口中以數據庫系統的自身返回信息顯示一般情況下為英文字符這樣既與應用程序的中文界面不協調也增加了對使用人員的要求顯得不夠專業
在實踐中筆者發現一種根據數據庫的返回信息自動判斷備份成功與否的方法並能在數據備份沒有完成時拒絕退出效果令人滿意下面在PowerBuilder Oracle Windows x環境下就這一方法的實現做一介紹
在備份圖標按鈕的Click事件中加入以下代碼
if fileexists(c:\jybaklog) then
filedelete(c:\jybaklog)
end if
Run(exp userid=scnmis/scnmis@jydb file=c:\jybakdmp full=y log=c:\jybaklogMinimized!);
st_messagetext=正在備份請耐心等待
back_up = True
其中back_up為全局變量定義為boolean back_up = false
在窗口的Timer事件中加入以下代碼
long file_handle
string read_line
If back_up Then
st_messagetext=正在備份請耐心等待
If L_quit Then
SetPointer(Hourglass!)
End If
file_handle = fileopen( c:\jybaklogLineMode!)
do while fileread(file_handleread_line) >
loop
If file_handle > Then
fileclose(file_handle)
SetPointer( Arrow! )
if Left(read_line) <> Export terminated successfully then
st_messagetext=數據備份失敗!
Messagebox(警告: 數據備份失敗!)
else
st_messagetext=數據備份成功!
Messagebox(恭喜! 數據備份成功!)
end if
g_bfbz = True
back_up = False
If L_quit Then
close(w_main)
Exit_Windows( )
End If
End If
End If
其中Exit_Windows為Global External Function定義為FUNCTION long ExitWindowsEx(long along b) LIBRARY userdll
至此監控的數據備份的目的基本已經達到為了實現在備份沒有完成的情況下禁止退出在退出圖標按鈕的Click事件中加入以下代碼
long file_handle i
string read_line
long rcallow
rc = MessageBox( 請您選擇: 是否退出系統? Question! YesNo! )
if rc = then
If g_bfbz = False then
If back_up Then
MessageBox( 提示信息:備份正在進行完成後才能退出按確定繼續備份)
Goto Lab
Else
allow = Messagebox(提示信息退出前應當備份現在開始嗎? Question! YesNo!)
L_quit =true
If allow= Then
Triggerevent(Cb_backupClicked!)
Else
close(w_main)
ExitWindowsEx( )
End If
End If
Else
close(w_main)
ExitWindowsEx( )
End if
End if
以上方法在PowerBuilder Oracle 環境下調試通過但在其他開發工具或數據庫系統中也可使用這種方法代碼的改動量不大具有一定的實用價值
From:http://tw.wingwit.com/Article/program/SQL/201311/16434.html