PowerBuilder數據窗口對象(轉)

////////////////////////////////////////
數據窗口對象的數據源
----------
PB提供5種數據源:Quick Select(快速選擇類型)、SQL Select(SQL選擇類型)、Query(查詢類型)、External(外部類型)和Stored Procedure(存儲過程類型)
----------
Quick Select
只能從一個數據表或者視圖中選取數據(無關聯的表或者視圖)??
----------
SQL Select
1、選擇表
可以一次選擇多個表
2、選擇字段
Select All //選擇所有字段
Select Tables //重新選擇表
Convert to Syntax //進入SQL語法狀態
Compute //計算字段,右鍵->Columns //選擇字段
      右鍵->Functions //選擇函數
3、指定檢索條件
Retrieval Arguments //定義檢索參數變量的類型和名稱
where //檢索條件,右鍵->Columns //選擇字段
      右鍵->Functions //選擇函數
      右鍵->Arguments //選擇參數
      右鍵->Value   //選擇值
      右鍵->Select //從其他表中選擇
----------
Query
PB可以將特定的SQL語句保存爲Query對象,不同的Query數據源的數據窗口都可以使用這些已經保存好的SQL語句來提取數據
----------
External
當和不存在於數據庫中的數據打交道或者要利用數據窗口的某些特性但不進行數據處理時,使用此數據源。無SQL語句。
----------
Stored Procedure
使用已經定義好的存儲過程來做數據源
----------

////////////////////////////////////////
數據窗口對象的顯示樣式
----------
數據窗口對象顯示樣式有11種:Grid、Tabular、Group、Freefrom、Label、N-Up、Crosstab、Graph、Composite、RichText、OLE2.0
----------
Grid:
字段橫向排列在detail band中,標籤橫向排列在header band中,和字段相對應,字段和字段之間有網格線分隔,類似於電子表格。在數據窗口的預覽狀態下可以調整字段的順序,並且自動反饋到數據窗口的設計狀態中,調整字段順序時,對應的標籤順序也相應地自動調整。缺省情況下,字段不能隨意移動,只能在detail band中做上下移動。這種顯示樣式的數據窗口布局整齊,但不能靈活地安排字段、標籤、表頭的佈局,所以常用來顯示數據或錄入數據,而很少用來做報表。Grid顯示樣式的數據窗口中,表頭只能和標籤放置在同一個header band中,在放置表頭處仍然有網格線。
----------
Tabular:
當剛剛創建這種樣式的數據窗口時,字段、標籤的佈局和 Grid顯示樣式的數據窗口相同,都是橫向排列的,但是字段之間沒有網格線分隔。字段和標籤的佈局可以隨意調整,在header band中的標籤可以隨意拖放到detail band中,detail band中的字段也可以拖動到header band中。這種顯示格式的數據窗口布局安排非常靈活,開發人員可以根據需要設計字段和標籤的佈局,然後手工畫線製作表格,在製作中國式
報表時經常使用,雖然比較煩瑣,但是表格比較美觀,比較適合中國式報表的要求,另外,這種格式的數據窗口在數據錄入、查詢時也經常使用。
----------
Group:
Group分組顯示樣式的數據窗口可以指定按哪個(或哪些)字段進行分組,可以用指定的分組條件將數據分組顯示,並且允許爲每組指定一些計算。例如,要顯示某公司在各地區的銷售數據,可以按地區分組,爲每個分組指定統計計算,在地區改變時顯示地區的銷售總金額。
當選擇多個字段時,這幾個字段共同作爲分組的條件,而不是以每個字段都創建一個分組。使用Group類型只能創建一個分組,要創建多個分組必須在DataWindow畫板中完成。
----------
Freefrom:
前面討論的三種顯示樣式都是一次可以顯示多行數據的。對於比較重要的數據,用戶可能需要一次只編輯一行這時可以使用Freefrom顯示樣式的數據窗口。該類型的數據窗口將標籤放置在字段的左例,字段和標籤放置在同一個detail band中,先從上到下再從左到右依次排列。實際上,這種顯示樣式的數據窗口布局也很靈活,可以隨意安排字段和標籤的位置。這種顯示樣式的數據窗口在卡片式數據的錄入和顯示方面也經常使用。
----------
Label:
如果用戶想要生成郵件標籤,可以使用Label顯示樣式的數據窗口來實現。
----------
N-Up:
這是可以在同一頁上顯示多列相同字段的一種特殊的顯示樣式。當要顯示的字段比較少或者不同行之間的數據需要做比較時,經常使用這種顯示樣式。使用嚮導可以創建N-up顯示樣式的數據窗口,需要指定的一個重要參數是每行重複顯示的字段的次數,也就是Number of rows per detail band,缺省爲2。該參數的大小視需要顯示的字段總長度和報表使用的打印紙寬度而定。N-up顯示樣式的數據從左到右顯示。另外,當選中行數據時,並不能選中實際上看到的一整行,而是邏輯上的一行。
----------
CrossTab:
當需要做數據統計和分析時,最好使用CrossTab顯示樣式的數據窗口,雖然報表在顯示格式方面不適合中國人的口味,但還沒有哪個C/S數據庫開發軟件將數據統計分析做得如此之好。使用CrossTab顯示樣式可以創建複雜的分類統計表,不管是表頭分類還是行分類。
創建CrossTab顯示樣式的數據窗口時,有幾個重要參數需要指定。這些重要參數是行、列和統計值。每個參數可以指定多個字段,也可以使用表達式。當指定多個字段(或表達式)時,字段的順序決定在表中的分組順序。比如,統計某銷售公司某年各個月份各種產品、不同花色在各個地區的銷售情況,可以用月份和地區作爲列,用產品名稱和花色作爲行。在Columns列表框中按Month、Region的順序加入字段,沒有Month可以使用表達式Month(sales_date)來獲取銷售時的月份。Rows列表框中的字段對應數據窗口中左側的表頭,Columns列表框中的字段對應數據窗口中上面 表頭,Values是出現在數據窗口表格單元中的統計值;Source Data列表框中是可以使用的字段,使用鼠標選中並拖動到相應的列表框即可。在Rows、Columns、Values三個列表框中都可以用鼠標雙擊已有字段,可以在接下來的對話框中輸入組合表達式。比如,使用year作爲Columns是可以的,也可以雙擊然後在上面的窗口中輸入下面的表達式:year+"年"
----------
Graph:
Graph顯示樣式的數據窗口可以以多種圖形樣式將數據顯示出來,例如餅圖、柱狀圖、折線圖等。Graph顯示樣式的數據窗口給用戶的感覺是使用方便、表達直觀。從開發者的角度來講,創建Graph顯示樣式的數據窗口也是很簡單的事情,所以在開發應用程序時不要忘記這費力不多卻很受用戶歡迎的顯示樣式。
創建Graph顯示樣式的數據窗口時,最重要的參數是Category、Values及Series。在創建嚮導中可以指定這幾個參數。指明這三個參數的操作很簡單,在下拉列表框中選擇合適的字段即可。Category可以理解成顯示在橫向座標鈾上的字段,Values可以理解成顯示在縱向座標軸上的字段,而Series是橫向座標軸上同組比較時的分組標準。
----------
Composite:
    這種顯示樣式的數據窗口可以將多種類型的、多個邏輯上毫不相關的數據窗口放置到一起,是一種靈活的數據表現形式。因爲Composite顯示樣式的數據窗口不允許修改其中的數據,所以不能用於數據錄入和數據修改,只能在報表時使用這種顯示祥式的數據窗口。使用這種顯示樣式的數據窗口創建報表,經常將對同一問題不同表現形式的數據窗口或者是關係緊密的數據放到一起。例如,將幾個關鍵數據的統計結果以Graph顯示樣式顯示在最上面,用CrossTab類型的數據窗口將比較詳細的數據統計結果顯示在中間,然後是Grid類型的詳細數據,這樣的報表數據表現能力要比任何單一的一種數據窗口要強得多。
----------
RichText:
RichText祥式的數據窗口使數據庫中的數據和文字可以在一起排版,可以方便地特數據庫中的數據和文字內容一起形成文檔、報告等;提供了很強的文字編輯處理能力,可以很方便地處理文字的多種格式:可以開發更有表現力的應用系統,自動生成報告、文檔資料,省去了使用PowerBuilder的應用程序卻需要切換到其他文字處理軟件中的麻煩。
----------
OLE 2.0:
OLE是Object Link and Embedding的字頭縮寫,表示對象鏈接和嵌入。使用這種技術,可以將其他軟件的功能引入到PowerBuilder開發的應用程序中。PowerBuilder中不僅提供了OLE 2.0顯示樣式的數據窗口,而且在窗口中提供了OLE 2.0控件。例如,在數據庫中保存的圖像在OLE 2.0顯示樣式的數據窗口中,可以藉助一些專門的圖像處理軟件來處理,並可以把處理結果返回保存到數據庫中。
只有當數據庫的表中包含blob類型的字段時,纔有必要使用OLE 2.0顯示樣式的數據窗口。將blob類型的字段作爲OLE 2.0列,在處理其中的數據時,可以直接觸發調用相關的軟件進行處理,並能夠將處理結果返回保存到數據庫中。例如,某字段中保存的是Excel文檔,可以創建OLE 2.0顯示樣式的數據窗口,當雙擊該字段時可以調用Excel,然後在Excel中編輯處理數據,保存編輯結果返回到數據窗口時,可以將結果反映到數據窗口中。
創建OLE 2.0顯示樣式的數據窗口,需要指定三類參數。Source Data框中顯示的是所有可用字段,可以使用鼠標選中並拖動到其他兩個列表框中;Group by列表框中顯示的是用來分組的字段,由於OLE 2.0數據窗口的特殊性,它的分組不在設計時創建,只能在嚮導中創建;Target Data框中顯示的是在數據窗口中要顯示的字段,使用了分組,則對該框中的字段做統計(字符串型的列將統計記錄數,數值型的列將統計累加和),沒有使用分組,則直接顯示它們的值。接下來要設置的是和OLE對象關係緊密的內容
----------

////////////////////////////////////////
數據窗口對象的畫板、band和層次
----------
數據窗口畫板
整個數據窗口畫板由6個視窗構成,分別是:
Design:設計數據窗口對象視窗,可以使用菜單Design-Options來改變Design窗口的外觀
Preview:預覽數據窗口的外觀,顯示相應表中的對應的數據,及對數據的各種操作
Control List:數據窗口中所有的部件構成的一個列表
Data:顯示此數據窗口對象所對應的表中的各個字段的值
Properties:屬性
Column Specification:該視窗是個比較重要的視窗,可以增加、刪除、修改列的初始值、檢驗表達式或者校驗信息
----------
數據窗口對象的band
數據窗口用帶-band將其分隔成四部分:
Header:出現在每頁的頂端,用於顯示標題和列的題頭
Detail:包含了數據窗口對象的主體,顯示了各行的數據和相關的標籤。在DataWindow對象高度的範圍內,細節條能夠按照需要自動擴大任意倍
Footer:出現在每頁的底端,用來顯示文本和頁號
Summary:出現在DataWindow對象的最後一頁,用來爲整個數據窗口對象顯示總計和總和
----------
數據窗口對象的層次
數據窗口分爲三個層次,即背景層(background)、帶層(band)和前景層(foreground)。在數據窗口上放置的部件可以屬於任意一個層次,但如果設計不當,數據顯示會凌亂不堪。通常情況下,背景層放置繪圖對象以設置漂亮的背景;帶層放置字段、計算域、標籤等和報表內容緊密相關的內容,在運行狀態下,PowerBuilder會自動格式化帶層;前景層放置一些無需打印的內容,最典型的是Graph部件。
    設置部件屬於哪個層的方法是首先選中部件,然後在屬性視窗中進入到Positon屬性頁,修改該部件的Layer屬性,在Layer下拉列表框中選擇適當的層即可。
    不管哪個層上的對象,鼠標右鍵彈出菜單中都有Send to Back和Bring to Font兩個選項。這兩個功能和層之間有什麼關係呢?沒有任何關係!不管部件屬於哪個層,都可以使用這兩個菜單項,使用完後部件也不會屬於其他的層,只是重疊部件的前後關係發生了變化。所以當部件沒有重疊時,使用這兩個菜單選項沒有什麼意義,雖然這兩個菜單選項也可以使用。
    選中數據窗口上的部件不區分層。也就是說,選中操作不受層的影響,可以同時選中不同層上的部件。當設置了較大的背景圖片時,可能不能使用拖動鼠標來直接選中多個對象,因爲拖動時,鼠標的起點可能就在背景圖片上。解決方法是在所有操作都完成後再放置背景圖片,也可首先將背景圖片剪切掉,進行其他操作後再粘貼圖片,或者先將背景圖片拖到沒有其他對象的位置上,操作完成後再將圖片背景拖放到原來位置
----------

////////////////////////////////////////
數據窗口對象及字段的修改屬性
數據窗口只能修改一個數據表。當數據窗口的數據來源於不止一個數據表時,可以用腳本控制數據窗口的修改屬性來對數據表逐個進行修改。
當數據窗口是用來接受用戶的手工錄入數據時,應該設置兩方面的屬性才能確保數據窗口能夠用來修改數據表。一個是修改數據窗口的修改屬性,另一個是用戶可以修改的字段的相關屬性值
----------
數據窗口對象的修改屬性
Rows->Update Properties
如果數據窗口對應的數據表中定義了主鍵或者唯一性索引,則數據窗口創建時默認的就是允許修改,並且正確設置了所有的修改屬性。否則就需要手工進行設置。當增加、刪除、或者重新選擇了字段時,PB將數據窗口的的修改屬性爲不允許,這時也應該進行手工設置。
Allow Updates:允許更新。
Table to Update:指定要被更新的表。
Where Clause for Update/Delete:配置如何在Update和Delete SQL語句中構造where子句
1、Key Columns 當開發單用戶應用程序或者用戶都以加鎖方式訪問數據庫時可以選中該選項。該選項表示數據窗口只使用在“Unique Key Column”列表框中指定的唯一列進行數據更新。使用這種方式來修改數據庫,併發性很高,不同的用戶都可以併發地訪問數據庫,但是數據的完整性卻非常差。因此要保護數據完整性,只有在單用戶程序或者加鎖訪問方式下才使用這種修改方式。如:在add_book(通訊錄)數據表中定義了4個字段,id爲主鍵,name,address,telephone三個字段爲可修改字段,有如下一條數據(001,陳,杭州,1395813)。若想把name改爲“萬”,數據窗口產生如下的update語句:update add_book set name = '萬' where id = '001'
2、Key and Updateable Columns 這種修改方式是默認的修改方式,它用主鍵列和可以修改的列來創建where子句,具有很高的數據完整性,但是併發性不是太好。推薦使用這種修改方式。保存數據時將產生如下的SQL語句:update add_book set name = '萬' where id = '001' and name = '陳' and address = '杭州' and telephone = '1395813'
3、Key and Modified Columns 該方法是上面兩種方法的折中,當不同的用戶併發修改同一行數據的不同字段時,都能成功修改,所以它的併發性有了一定的限制,數據的完整性比第一種修改方式有所提高。這種修改方式使用主鍵和數據發生了變化的列來產生where子句。保存數據時產生如下的SQL語句:update add_book set name = '萬' where id = '001' and name = '陳'
Key Modification:該組框用來指定當用戶修改了主鍵時,數據窗口如何來更新數據表中的主鍵字段。有兩種選擇Use Delete then Insert和Use Update。第一個選項是先刪除原有的主鍵值,然後再使用新的主鍵值插入一個完整的行。使用這種更新主鍵的方式可以減少組織數據的工作量,但在數據庫中各個數據表之間存在父子制約關係,並且依賴該主鍵的外部鍵被指定爲級聯刪除時,操作就不會成功的。因爲級聯刪除方式要求當依賴主鍵的外部鍵有數據時就不能刪除主鍵。當DBMS允許更新主鍵列時,可以使用第二個選項,該選項直接修改主鍵值,所以防止了級聯刪除帶來的操作不成功的問題。
Updateable Columns:指定被更新的字段。當數據窗口中的字段來自不止一個數據表時,這時一定要選擇同一個表中的字段,因爲一個數據窗口一次只能更新一個數據表,當數據窗口中增添了字段時,新增添的字段往往是不允許修改的,一定要在該列表框中選擇該字段。
Unique Key Column:選擇唯一標識一行的列。如果在定義數據表時定義了主鍵,單擊右面的“Primary Key”按鈕可以在該列表框中選中主鍵。
Identity Column:該下拉列表框用於爲下拉列表框中所指定的列(通常是主鍵列)生成序號,當且僅當DBMS支持序號生成時該作用纔有效
----------
數據窗口對象字段的修改屬性
**相關屬性
數據窗口中字段的相關屬性:
1、字段的Tab Order值
2、字段的Protect屬性
3、字段的DisplayOnly屬性
4、字段的Visible屬性
    上述屬性前3箇中任意一個都可以讓用戶無法修改字段中的數據:最後一個屬性決定字段是否可見,不可見的字段不管其他屬性如何設置.用戶都無法修改字段中的數據。
    當字段的Tab Order值爲0時,肯定不能獲得焦點,但是非0時也不一定能獲得焦點,還得看字段的Protect屬性是否設置爲1;當字段的Tab Order值不爲0,Protect屬性不爲1並且字段的Visible屬性爲True時,肯定可以獲得焦點。DisplayOnly屬性和焦點是否能夠獲得無關(即選中Displayonly時可以選中字段,可以複製,但不能更新)。

**數據保護
可以用以下三種方法將字段設置爲用戶不可修改的字段:
(1)在數據窗口設計時將這些字段的TabOrder值置爲0,以使該字段不能獲得焦點,用戶無法選中和編輯該字段。
(2)將字段的DisplayOnly屬性設置爲True。該字段可以獲得焦點,可以選中該字段,還可以拷貝複製該字段的內容,但不能編輯該字段中的內容。
(3)設置字段的Protect屬性。字段的Protect屬性如果設置爲“1”,則該字段的TabOrder值即使不是0也不會得到焦點。使用該屬性可以保護一些重要的數據。
----------

////////////////////////////////////////
數據窗口對象的字段操作
----------
字段的編輯類型
PB提供了六種編輯類型:
1)Edit是字段的缺省編輯類型,可以用於所有類型的字段上。
2)CheckBox編輯類型在這裏是一種狀態選擇,可以爲其規定選中和非選中狀態時的文字,當字段的輸入內容非此即彼時,可以使用這種編輯類型。
3)DropDownDW是一種用來限制用戶輸入數據的非常好的編輯方式,用戶只能通過選擇錄入數據,並且選擇的數據來自其他數據窗口的某字段,從而可以確保數據的一致性和正確性。當錄入外部鍵時,經常使用這種編輯類型。使用這種方式可以增強程序的適應性和靈活性。
4)DropDownListBox在外觀上和DropDownDW類型相同,但它的數據不會發生變化,是固定的,適合用來錄入諸如學歷、省份、月份等範圍固定的數據項。
5)EditMask經常用來錄入整型或日期型數據。它底優勢在於可以給用戶提供清晰的數據格式,對用戶的操作有很強的提示性;還可以爲該編輯類型設置Spin,以便用鼠標單擊上下箭頭來增大或減小數據。
6)Radio Buttons在錄入取值爲比較小範圍內的數據經常使用,用戶使用鼠標進行選擇操作即可錄入數據,操作比較方便。
----------
字段的編輯格式
1、Limit - 限制輸入長度
可以規定在該字段中輸入的信息長度,缺省是字段在數據表中定義的長度。如果在數據窗口創建以後又添加了字段,這時缺省長度是0,這時用戶所能輸入的長度取決於編輯框的長度(如果沒有設置字段的AutoHorz Scroll屬性或者設置了該屬性並且Limit屬性爲0,則用戶輸入的最大長度取決於編輯框所能接受的最大長度),應該手工修改其限制長度爲字段在表中定義的長度。修改方法是,在字段屬性窗口的Edit頁Limited輸入框中輸入一個整數即可

2、Display Only - 不允許用戶修改
選中字段對應屬性窗口中的Display Only選項即可。在程序運行時,該字段中的內容可以顯示,並且可以獲得焦點,但是用戶不能修改字段的內容,從而起到保護數據的作用。建議使用這種方式來保護字段中的數據,雖然不能編輯字段內容,但可以選中並複製,比設置字段的Tab Order值有更多的靈活性

3、Required - 必須輸入
有些信息要求用戶必須輸入,這時可以選中字段的Required屬性。不輸入數據就無法離開該字段。

4、Password - 密碼輸入
選中字段屬性窗口中Edit頁上的Password屬性即可,字段上數據顯示爲“*”號

5、Format - 格式
屬性視圖中Edit屬性頁中包含Format屬性,並且還有一個專門的Format屬性頁。Edit屬性頁的Format屬性可以設置字段編輯時的顯示格式,Format屬性頁中的Format設置字段不被編輯時的顯示格式。

Format的設置:

Numbers:可以使用“0”、“#”、“.”和一些算術符號來表示,使用保留字“[general]”或者“[Currency]”時,PB將使用操作系統的設置格式。關於操作系統的格式,Windows可以在控制面板的區域設置中修改。
[General]   5   -5   0.5
0    5   -5   1
0.00    5.00   -5.00   0.50
#,##0    5   -5   1
#,##0.00   5.00   -5.00   0.50
$#,##0;($#,##0)   $5   ($5)   $1
$#,##0;-$#,##0   $5   -$5   $1
$#,##0;[RED]($#,##0) $5   ($5)   $1
$#,##0.00;($#,##0.00) $5.00   ($5.00)   $0.50
$#,##0.00;[RED]($#,##0.00)$5.00   ($5.00)   $0.50
0%    500%   -500%   50%
0.00%    500.00%   -500.00% 50.00%
0.00E+00   5.00E+00 -5.00E+00 5.00E-01

Strings:可以用兩部分來表示該類型數據的顯示,前面是必需部分,後面是NULL時表示。“@”代表一個字符。如:"[red](@@@)@@@-@@@@"

Dates:使用幾個特定的字母代表特定的含義,它們的組合構成Data類型的格式。
d 表示天的數字,沒有前綴0   9
dd 表示天的數字,有前綴0   09
ddd 星期幾的英文縮寫   Mon
dddd 星期幾的英文全稱   Monday
m 沒有前綴0的月份    6
mm 有前綴0的月份    06
mmm 月份的英文縮寫    Jun
mmmm 月份的英文全稱    June
yy 兩位數字表示的年份   97
yyyy 四位數字表示的年份   1997
兩位的年份如果小於50,PB則認爲是21世紀;大於50則認爲是20世紀。比如,“85”表示的年份PB認爲是“1985”年;“40”表示的年份PB認爲是“2040”。

Times:使用幾個特定的字母代表特定的含義,它們的組合構成Time類型的格式。
h 沒有前綴0的表示小時的數字
hh 有前綴0的表示小時的數字
m 沒有前綴0的表示分鐘的數字,必須出現在h或者hh之後
mm 有前綴0的表示分鐘的數字,必須出現在h或者hh之後
s 沒有前綴0的表示秒的數字,必須出現在m或者mm之後
ss 有前綴0的表示秒的數字,必須出現在m或者mm之後
ffffff 沒有0前綴的毫秒,必須出現在s或者ss之後
AM/PM 兩個大寫的縮寫字母,代表上午和下午
am/pm 兩個小寫的縮寫字母,代表上午和下午
A/P 一個大寫的縮寫字母,代表上午和下午
a/p 一個小寫的縮寫字母,代表上午和下午

6、Auto Selection - 自動選中
當字段獲得焦點時,自動選中當前行字段中的內容,這在需要刪除或者拷貝時用處比較大。選中字段對應屬性窗口中Edit頁上的auto selection即可。

7、設置滾動條
Auto Horz Scroll--自動橫向滾動
Auto Vert Scroll--自動縱向滾動
Horz Scroll Bar --橫向滾動條
Vert Scroll Bar --縱向滾動條

8、Use Code Table - 使用Code Table
使用Code Table可以自動轉換用戶的輸入信息,也可以校驗用戶的輸入信息是否正確。
a)選中字段的Use Code Table屬性
b)在Code Table中定義代碼表,該輸入框中包括兩列,Display Value用來進行顯示,Data Value是和該顯示值對應的實際值,是保存在數據庫中的值。
c)選中Validate選項,從而可以確保用戶的輸入必須是代碼表中定義了的,否則就出現報錯信息。

9、Show Focus Rectangle - 顯示焦點邊框
焦點邊框就是當字段獲得焦點時,在字段編輯框的周圍顯示一個矩形邊框,可以醒目地提醒用戶當前的輸入位置,這是一個比較好的界面,建議使用該屬性。選中字段對應屆性窗口Edit頁中的Show Focus Rectangle即可。Tabular默認選中

10、Accelerator - 設置加速度
可以爲字段設置加速鍵,以便很快捷地定位到特定的字段上。只要在字段對應屬性窗口Edit頁的Accelerator編輯框中輸入字母或數字即可,只能輸入一個字符。加速鍵由Alt和所輸入的字母或數字構成。程序運行時,使用加速鍵可以將焦點馬上轉移到有該加速鍵的字段上。

11、Case - 選擇大小寫
可以給字符型字段指定大寫、小寫、還是原樣顯示輸入內容。在字段對應的屬性窗口Edit頁中的Case下拉列表框中選擇即可。Up代表始終大寫,Any代表原樣,Lower代表小寫。
----------
增加和刪除字段
進入數據窗口對象的SQL Select畫板後可以對字段進行以下三種操作:
1、增加字段
2、刪除字段
3、重選字段。取消某字段,再重新選中該字段。這看起來好像沒有什麼作用。實際上,這樣做可以同步數據窗口對象和數據表的定義。當創建了數據窗口後又修改了該數據窗口對象對應數據表中某字段的定義,例如,增加了字段的長度,這是應該保證字段和數據窗口中的定義一致,使用上面的方法就可以做到數據的一致
*當添加字段時,PB不能正確設定新添加字段的默認屬性,必須認真檢查新添加的屬性,最重要的屬性是Limit的大小以及Show Focus Rectangle、Auto Selection和Auto Horz Scroll屬性是否選中。如果數據窗口對應的數據表中既沒有定義主鍵也沒有定義唯一性索引,並且數據窗口還是用來進行數據錄入的,這時不管是刪除了數據窗口中的字段或添加了字段,還是重新選擇了字段,都要仔細檢查並重新設置數據窗口的Update屬性了,如果數據表中定義了主鍵或者唯一性索引,就不用考慮這個問題了。
----------
字段的顯示順序
在大多數顯示樣式的數據窗口中都可以使用鼠標拖放直接改變字段的位置,惟獨grid類型的數據窗口在Design窗口中不能。解決方法是,在預覽窗口中拖動字段到適當的位置,Design窗口中的字段順序就會自動做相應的調整。
    可以用字段名或者字段號來標識一個字段。例如,產生數據窗口的SQL語句是:
    select name,sex,address from addr_book;
    在該數據窗口中,name和#1都是指同一個字段。顯示位置的調整不會影響字段號,字段號和產生數據窗口的SQL語句中字段的順序相對應,在SQL語句中,第一個字段對應的字段號爲#1,依次增加一個。要調整字段號的順序,可以進入到SQL select畫板,取消所有字段,再按照正確的字段順序重新選擇字段;或者切換到語法狀態,手工修改SQL語法中字段的順序。經過這樣的調整後,可能字段在數據窗口中顯示的順序沒有變化,但是字段號卻進行了重新分配。因爲在窗口腳本中引用數據窗口的數據時,有可能用到字段號,在數據窗口的計算域中也有可能用到字段號,所以要保證字段號正確設定,尤其是習慣使用字段號引用數據時。
----------

////////////////////////////////////////
計算域是指在數據窗口的設計狀態下添加到數據窗口中的Computed Field部件,它是一個數據窗口部件,具有部件的屬性特徵。計算字段是指在數據窗口對應的SQL語句中添加的表達式,計算字段是一個字段,它具有字段的屬性特徵。它們的區別主要體現在腳本中。計算字段因爲具有字段的特徵,所以SetItem等對字段操作的函數可以用來操作計算字段而不能來操作計算域,當需要在程序中動態設置值時,就應該使用計算字段而不能使用計算域,典型情況是對計算出來的值進行誤差校正。這兩個對象都可以使用GetItem一類的函數來讀取取值。

常用函數:
條件判斷
If ( boolean, truevalue, falsevalue )
Case ( column WHEN value1 THEN result1 { WHEN value2 THEN result2 { ... } } { ELSE resultelse } )

累積,(表格最右面一列各行是某列對應行前面所有行的累加和)
CumulativeSum(column{for range})
其中,column是列名、列號,或者是由列名、列號、常量、運算符,甚至其他函數構成的表達式,但取值必須是數值型的。For range是進行累積的範圍。大多數顯示樣式的數據窗口都可以使用如下內容。
All:缺省值,累積指定列的所有取值
Group n:在指定的分組內對指定字段進行累積運算。Group是保留字,n代表組號,如1。
Page:在頁範圍內進行累積運算。

百分比
Percent ( column { FOR range { DISTINCT { expres1 {, expres2 {, ... } } } } } )
Percent可以用來計算某字段在指定範圍內當前行的取值佔該範圍內該字段累計和的比例。
其中,column以及For range和上面CumulativeSum函數中的完全相同。選項DISTINCT用來指定只統計不相等的字段,表達式expresX是用來區分行是否相同的標準。該函數和表達式column/sum(column for range)是等價的。
CumulativePercent(column{FOR range})
用來計算當前的累積和佔總和的比例
其中的column和for range和上面的相同。該函數和下面的表達式是等價的:
CumulativeSum(column for range)/sum(column for range)

引用不同行的數據
在數據窗口的表達式中,可以直接使用列名數組引用不同行的字段值,下標是一個相對數,相對於當前行而言的。例如,假設在數據窗口中有一列名爲product_id,在數據窗口表達式中,product_id和product_id[0]是指當前行的product_id值。product_id[-1]是指前面一行的product_id值,product_id[1]是指下一行的product_id值。
    使用這種引用方法,可以很簡潔地提供更友好的數據顯示格式。例如,當product_id改變時,用另外一種顏色顯示月份、銷售量、庫存量等,可以修改這些字段的顏色表達式(應該以product_id排序):
    if(getrow()=1,rgb(255,0,0),if(product_id = product_id[-1],rgb(255,0,0),rgb(255,255,255)))

數據行的修改狀態
isRowNew()
isRowModified()
if(isRowNew(),'新',if(isRowModified(),'改','舊'))

其他
date
isSelected
average
count
sum

////////////////////////////////////////
排序、過濾和分組
----------
排序
Rows->Sort
*雙擊Columns列表框中的字段或表達式,進入Modify Expression窗口,可以進行表達式定義,表示要使用該表達式進行排序。
上面的方法定義的排序是在客戶端執行的,要在服務器端進行數據排序,可以通過修改數據窗口對應的SQL來實現。
----------
過濾
Rows->Filter
在對話框中輸入表達式,在定義表達式時,有些經常使用的運算符,如like、betweem、in、match等需要特別關注一下。*特別是match具體可以在程序中測試,具體見PB幫助-match。
上面的方法同排序是在客戶端執行的,要在服務器端進行數據排序,可以通過SQL語句中使用where子句,然後用帶參數的retrieve來過濾。
----------
分組
Rows->Create Group
*雙擊“Columns”列表框中的字段或表達式,進入Modify Expression窗口,進行表達式定義。創建分組後,數據窗口中又增加了兩個帶(band),Header group name用來先死組名,放置用來分組的表達式或者字段;Trailer group name放置分組的總結信息。
數據窗口創建後定義的分組和使用分組樣式創建的數據窗口在顯示效果上相同,區別在於前面一中方式是在數據完全從服務器端傳送到客戶端後進行的,後一種是直接在服務器按照分組取出數據的。
*最後介紹一種方法,同樣可以達到Group的效果。比如,顯示各個地區產品銷售情況的數據,應該使用地區作爲分組。在數據窗口畫板中選擇窗口菜單Rows->Sort,選擇以字段“region”進行排序;然後再選擇窗口菜單Rows->Supress Reapting values…,指定壓縮字段“region”的重複值即可。
----------

////////////////////////////////////////
其他
----------
數據窗口中的當前頁和總共頁
st

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章