PowerBuilder(以下簡稱PB)是Powersoft公司(已被Sybase收購)推出的基於客戶機/服務器體系結構的強有力的開發工具,自問世以來深受開發人員的好評。Datawindow是PB中獲取專利技術的控件,它對數據的處理方法相當簡潔,數據窗口能處理各種顯示格式、進行報表打印,對復雜的嵌套報表同樣處理自如。
數據窗口的處理機制首先是根據所需的顯示方式將數據源表中的域設計好,在運行時將所要的數據從數據庫服務器上下載到客戶機上處理,然後將更改後的數據進行提交(Commit)或回滾(Rollback)。這種處理機制大大降低了數據的傳輸量,減輕了網絡的負擔,也提高了數據的處理速度。充分利用數據窗口的特點,可達到事半功倍的效果,但是如果有些問題不加注意就會出現意想不到的錯誤。
幾個函數
1. AcceptText()
AcceptText()函數的功能是將數據窗口當前編輯的數據轉移到數據窗口的緩沖區中。程序通常在關閉窗口及其他情況下判斷是否改變了當前數據。如果已改變數據,應提示用戶保存。這就杜絕了用戶在偶然的情況下丟失更改數據的現象。一般用ModifIEdCount和DeletedCount函數判斷數據是否改變。
PB在處理數據窗口時,對應開辟了四個數據緩沖區,分別為Primary Buffer、Deleted Buffer、Filter Buffer、SortBuffer,其中Deleted Buffer存放被刪除的記錄,Filter Buffer存放被過濾的記錄,Sort Buffer存放排序的記錄,Primary Buffer存放其他記錄。函數ModifIEdCount從Primary and Filter Buffers中取數據進行判斷,DeletedCount則從Deleted Buffer中取數據進行判斷。
PB在接受用戶輸入時設置了一個浮動編輯框,用戶輸入或更改的內容並不直接進入Primary Buffer,而是在用戶輸入完後進入下一個域時,PB首先對它進行有效性檢測,通過後轉入Primary Buffer。如果只改變一項數據就關閉窗口則相關數據並沒有進入Primary Buffer,系統判斷ModifIEdCount()為0,所以不會提示保存數據。用AcceptText()函數就可以將浮動編輯框中的數據轉入緩沖區中,在相應的程序段前加上Accepttext(),問題就解決了。
2. FindRequired()
在實際應用中經常需要限制表中一些域的屬性,例如銀行客戶表中賬號就不能為Null。在提交數據前檢查是否將必須輸入的數據都賦值是一個很好的編程習慣。FindRequired函數可以解決此問題,它通過對數據窗口中數據的檢查,將數據窗口中域的屬性為Required,而並未賦值的域(包括相應的行、列)找出來。
為了利用此函數,在構造數據窗口時就要注意將表中具有NOT NULL屬性的數據列設為Required(方法為:在數據窗口相應域上按鼠標右鍵或雙擊左鍵,彈出Column Object 框,選Edit頁,將Required前的框選中,按Ok鈕即可)。在相應事件中插入下列程序:
long ror=1 //行數賦1
integer colnbr=0 //列數賦0
string colname //用來存儲列名
mle_required.Text = "" //窗口中的多行編輯控件,用來存儲找到域的行、列號
DO WHILE row <> 0
colnbr++ //繼續找下一列
IF dw_1.FindRequired(Primary!,row, colnbr,colname, FALSE) < 0 THEN EXIT
//若程序出錯則返回
IF row <> 0 THEN
mle_required.Text = mle_required.Text + String(row) + "~t" &+ colname + "~r~n" //保存查出的行、列號
END IF
//當ROW返回為 0 則意味再沒有查出,跳出循環
LOOP
程序執行完後,多行編輯框中顯示的為出錯的地方,用戶根據提示可以輕易地更改。
FindRequired函數中的Row、Colnbr參數能自動增加或重置,Colname用來存放列的字符名。
數據的突出顯示及保護:程序運行中,用戶希望顯示的數據具有明顯的區分,例如學生的成績(不及格的分數要用紅色顯示),有些數
據必須只能顯示,不能讓用戶修改;還有些數據在有些時候可以修改,有些時候不能修改等。以上情況可歸結為兩點:
3. 數據的突出顯示
數據窗口應該能使用戶很快找到他們想要的信息,以顏色區分既滿足用戶的習慣,又不占系統資源,實現起來也很簡單。以學生管理為例,要求成績低於60分的以紅色顯示,其他不變。