熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

深入了解PowerBuilder的數據窗口

2013-11-13 12:36:37  來源: SQL語言 

  PowerBuilder(以下簡稱PB)是Powersoft公司(已被Sybase收購)推出的基於客戶機/服務器體系結構的強有力的開發工具自問世以來深受開發人員的好評Datawindow是PB中獲取專利技術的控件它對數據的處理方法相當簡潔數據窗口能處理各種顯示格式進行報表打印對復雜的嵌套報表同樣處理自如

  數據窗口的處理機制首先是根據所需的顯示方式將數據源表中的域設計好在運行時將所要的數據從數據庫服務器上下載到客戶機上處理然後將更改後的數據進行提交(Commit)或回滾(Rollback)這種處理機制大大降低了數據的傳輸量減輕了網絡的負擔也提高了數據的處理速度充分利用數據窗口的特點可達到事半功倍的效果但是如果有些問題不加注意就會出現意想不到的錯誤

  幾個函數

   AcceptText()

  AcceptText()函數的功能是將數據窗口當前編輯的數據轉移到數據窗口的緩沖區中程序通常在關閉窗口及其他情況下判斷是否改變了當前數據如果已改變數據應提示用戶保存這就杜絕了用戶在偶然的情況下丟失更改數據的現象一般用ModifiedCount和DeletedCount函數判斷數據是否改變

  PB在處理數據窗口時對應開辟了四個數據緩沖區分別為Primary BufferDeleted BufferFilter BufferSortBuffer其中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()為所以不會提示保存數據用AcceptText()函數就可以將浮動編輯框中的數據轉入緩沖區中在相應的程序段前加上Accepttext()問題就解決了

   FindRequired()

  在實際應用中經常需要限制表中一些域的屬性例如銀行客戶表中賬號就不能為Null在提交數據前檢查是否將必須輸入的數據都賦值是一個很好的編程習慣FindRequired函數可以解決此問題它通過對數據窗口中數據的檢查將數據窗口中域的屬性為Required而並未賦值的域(包括相應的行列)找出來

  為了利用此函數在構造數據窗口時就要注意將表中具有NOT NULL屬性的數據列設為Required(方法為:在數據窗口相應域上按鼠標右鍵或雙擊左鍵彈出Column Object 框選Edit頁將Required前的框選中按Ok鈕即可)在相應事件中插入下列程序:

long ror= //行數賦

  integer colnbr=   //列數賦

  string  colname //用來存儲列名

  mle_requiredText = //窗口中的多行編輯控件用來存儲找到域的行列號

  DO WHILE row <>

  colnbr++ //繼續找下一列

  IF dw_FindRequired(Primary!row colnbrcolname FALSE) < THEN EXIT

  //若程序出錯則返回

  IF row <> THEN

  mle_requiredText = mle_requiredText + String(row) + ~t &+ colname + ~r~n //保存查出的行列號

  END IF

  //當ROW返回為 則意味再沒有查出跳出循環

  LOOP

  程序執行完後多行編輯框中顯示的為出錯的地方用戶根據提示可以輕易地更改

  FindRequired函數中的RowColnbr參數能自動增加或重置Colname用來存放列的字符名

  數據的突出顯示及保護:程序運行中用戶希望顯示的數據具有明顯的區分例如學生的成績(不及格的分數要用紅色顯示)有些數

  據必須只能顯示不能讓用戶修改;還有些數據在有些時候可以修改有些時候不能修改等以上情況可歸結為兩點:

   數據的突出顯示

  數據窗口應該能使用戶很快找到他們想要的信息以顏色區分既滿足用戶的習慣又不占系統資源實現起來也很簡單以學生管理為例要求成績低於分的以紅色顯示其他不變方法是:在數據窗口中對應成績的列(例如/CJ)上雙擊鼠標左鍵或單擊鼠標右鍵彈出Column Object對話框選取Expressions頁在Color後的框中輸入:

  if(cj<rgb()rgb())此句表示當成績小於則顯紅色否則灰色顯示

  IF語句只可能有兩種選擇如果要更多的條件判斷則必須用CASE語句例如成績大於等於用藍色小於用紅色其他用綠色則應該用以下語句:

  Case(cj WHEN IS >= THEN RGB() WHEN IS < THEN RGB() E

  LSE RGB())

  我們還可以輸入更加復雜的公式

  圖形是最好的說明語言為了更好體現數據的直觀性可以采用條件位圖的方法之所以稱為條件位圖是因為它隨數據的性質而決定是否顯示用可以在上述的成績管理數據窗口的前面加上一個圖片雙擊位圖彈出Picture Object對話框選Expressions頁在Visible右的編輯框寫入if(xb=)此句的意義為當性別為(女)時蝴蝶出現否則蝴蝶消失程序運行起來相當直觀讀者可以觸類旁通充分利用列的屬性使用戶的界面更加友善漂亮

   數據的保護

  有很多情況需要對數據進行保護(即只能顯示而不允許修改)學生查詢成績時就是這種情況進行數據保護的方法有很多第一種是雙擊要保護的列彈出Column Object選取Edit頁將Display Only框選中;第二種將要保護的列的TabOrder置則此列得不到焦點當然就無從修改;第三種是從根本作起選取Rows菜單再選取Update Properties彈出Specify Update Properties對話框將Allow Updates設為空這樣即使用戶更改了也無法更新數據庫使更改毫無意義

  以上情況都是事先已經確定需要保護的數據如果有些數據要保護有些不要保護則以上的方法就無法實現例如合同台賬管理:對於一個沒有實施的合同可以更改對於一個已經實施的合同則必須加以保護這需要用列的保護屬性來實現方法如下:

  雙擊每一列彈出Column Object對話框選取Expressions頁在Protect後的框中寫入:if(sfss=)其中sfss為表示合同是否實施如果實施(值為)則進行數據保護否則可以更改此方法可以在程序運行中動態控制數據的保護方式

  數據窗口的多表更新

  在處理數據時經常需要將幾個表中的數據放入一個數據窗口中進行處理一般情況下多表數據源的數據窗口只能用於數據的檢索而不能更新想要更新數據則采用的方法為:創建數據窗口(將各個表的主鍵包括進去)修改Taborder使數據能被更改然後對應各個表創建相應的隱含數據窗口隱含數據窗口的數據項和主數據窗口中對應表的數據項應完全一致存盤時將主數據窗口中的數據拷貝到相應的隱含數據窗口中去逐個保存各隱含數據窗口中的數據即可由此看來第二種方法更容易理解和接受實現起來也很簡單


From:http://tw.wingwit.com/Article/program/SQL/201311/16236.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.