版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
[PB]-數(shù)據(jù)窗口對象(一)////////////////////////////////////////數(shù)據(jù)窗口對象的數(shù)據(jù)源PB提供5種數(shù)據(jù)源:QuickSelect(快速選擇類型)、SQLSelect(SQL選擇類型)、Query(查詢類型)、External(外部類型)和StoredProcedure(存儲過程類型)QuickSelect只能從一個數(shù)據(jù)表或者視圖中選取數(shù)據(jù)(無關(guān)聯(lián)的表或者視圖)??SQLSelect1、選擇表可以一次選擇多個表2、選擇字段SelectAll//選擇所有字段SelectTables〃重新選擇表ConverttoSyntax//進入SQL語法狀態(tài)Compute〃計算字段,右鍵->Columns〃選擇字段右鍵->Functions〃選擇函數(shù)3、指定檢索條件RetrievalArguments〃定義檢索參數(shù)變量的類型和名稱where〃檢索條件,右鍵->Columns〃選擇字段右鍵->Functions〃選擇函數(shù)右鍵->Arguments〃選擇參數(shù)右鍵->Value//選擇值右鍵->Select//從其他表中選擇QueryPB可以將特定的SQL語句保存為Query對象,不同的Query數(shù)據(jù)源的數(shù)據(jù)窗口都可以使用這些已經(jīng)保存好的SQL語句來提取數(shù)據(jù)External當(dāng)和不存在于數(shù)據(jù)庫中的數(shù)據(jù)打交道或者要利用數(shù)據(jù)窗口的某些特性但不進行數(shù)據(jù)處理時,使用此數(shù)據(jù)源。無SQL語句。StoredProcedure使用已經(jīng)定義好的存儲過程來做數(shù)據(jù)源////////////////////////////////////////數(shù)據(jù)窗口對象的顯示樣式數(shù)據(jù)窗口對象顯示樣式有11種:Grid、Tabular、Group、Freefrom、Label、N-Up、Crosstab、Graph、Composite、RichText、OLE2.0Grid:字段橫向排列在detailband中,標簽橫向排列在headerband中,和字段相對應(yīng),字段和字段之間有網(wǎng)格線分隔,類似于電子表格。在數(shù)據(jù)窗口的預(yù)覽狀態(tài)下可以調(diào)整字段的順序,并且自動反饋到數(shù)據(jù)窗口的設(shè)計狀態(tài)中,調(diào)整字段順序時,對應(yīng)的標簽順序也相應(yīng)地自動調(diào)整。缺省情況下,字段不能隨意移動,只能在detailband中做上下移動。這種顯示樣式的數(shù)據(jù)窗口布局整齊,但不能靈活地安排字段、標簽、表頭的布局,所以常用來顯示數(shù)據(jù)或錄入數(shù)據(jù),而很少用來做報表。Grid顯示樣式的數(shù)據(jù)窗口中,表頭只能和標簽放置在同一個headerband中,在放置表頭處仍然有網(wǎng)格線。Tabular:當(dāng)剛剛創(chuàng)建這種樣式的數(shù)據(jù)窗口時,字段、標簽的布局和Grid顯示樣式的數(shù)據(jù)窗口相同,都是橫向排列的,但是字段之間沒有網(wǎng)格線分隔。字段和標簽的布局可以隨意調(diào)整,在headerband中的標簽可以隨意拖放到detailband中,detailband中的字段也可以拖動到headerband中。這種顯示格式的數(shù)據(jù)窗口布局安排非常靈活,開發(fā)人員可以根據(jù)需要設(shè)計字段和標簽的布局,然后手工畫線制作表格,在制作中國式報表時經(jīng)常使用,雖然比較煩瑣,但是表格比較美觀,比較適合中國式報表的要求,另外,這種格式的數(shù)據(jù)窗口在數(shù)據(jù)錄入、查詢時也經(jīng)常使用。Group:Group分組顯示樣式的數(shù)據(jù)窗口可以指定按哪個(或哪些)字段進行分組,可以用指定的分組條件將數(shù)據(jù)分組顯示,并且允許為每組指定一些計算。例如,要顯示某公司在各地區(qū)的銷售數(shù)據(jù),可以按地區(qū)分組,為每個分組指定統(tǒng)計計算,在地區(qū)改變時顯示地區(qū)的銷售總金額。當(dāng)選擇多個字段時,這幾個字段共同作為分組的條件,而不是以每個字段都創(chuàng)建一個分組。使用Group類型只能創(chuàng)建一個分組,要創(chuàng)建多個分組必須在DataWindow畫板中完成。Freefrom:前面討論的三種顯示樣式都是一次可以顯示多行數(shù)據(jù)的。對于比較重要的數(shù)據(jù),用戶可能需要一次只編輯一行這時可以使用Freefrom顯示樣式的數(shù)據(jù)窗口。該類型的數(shù)據(jù)窗口將標簽放置在字段的左例,字段和標簽放置在同一個detailband中,先從上到下再從左到右依次排列。實際上,這種顯示樣式的數(shù)據(jù)窗口布局也很靈活,可以隨意安排字段和標簽的位置。這種顯示樣式的數(shù)據(jù)窗口在卡片式數(shù)據(jù)的錄入和顯示方面也經(jīng)常使用。Label:如果用戶想要生成郵件標簽,可以使用Label顯示樣式的數(shù)據(jù)窗口來實現(xiàn)。N-Up:這是可以在同一頁上顯示多列相同字段的一種特殊的顯示樣式。當(dāng)要顯示的字段比較少或者不同行之間的數(shù)據(jù)需要做比較時,經(jīng)常使用這種顯示樣式。使用向?qū)Э梢詣?chuàng)建N-up顯示樣式的數(shù)據(jù)窗口,需要指定的一個重要參數(shù)是每行重復(fù)顯示的字段的次數(shù),也就是Numberofrowsperdetailband缺省為2。該參數(shù)的大小視需要顯示的字段總長度和報表使用的打印紙寬度而定。N-up顯示樣式的數(shù)據(jù)從左到右顯示。另外,當(dāng)選中行數(shù)據(jù)時,并不能選中實際上看到的一整行,而是邏輯上的一行。CrossTab:當(dāng)需要做數(shù)據(jù)統(tǒng)計和分析時,最好使用CrossTab顯示樣式的數(shù)據(jù)窗口,雖然報表在顯示格式方面不適合中國人的口味,但還沒有哪個C/S數(shù)據(jù)庫開發(fā)軟件將數(shù)據(jù)統(tǒng)計分析做得如此之好。使用CrossTab顯示樣式可以創(chuàng)建復(fù)雜的分類統(tǒng)計表,不管是表頭分類還是行分類。創(chuàng)建CrossTab顯示樣式的數(shù)據(jù)窗口時,有幾個重要參數(shù)需要指定。這些重要參數(shù)是行、列和統(tǒng)計值。每個參數(shù)可以指定多個字段,也可以使用表達式。當(dāng)指定多個字段(或表達式)時,字段的順序決定在表中的分組順序。比如,統(tǒng)計某銷售公司某年各個月份各種產(chǎn)品、不同花色在各個地區(qū)的銷售情況,可以用月份和地區(qū)作為列,用產(chǎn)品名稱和花色作為行。在Columns列表框中按Month、Region的順序加入字段,沒有Month可以使用表達式Month(sales_date)來獲取銷售時的月份。Rows列表框中的字段對應(yīng)數(shù)據(jù)窗口中左側(cè)的表頭,Columns列表框中的字段對應(yīng)數(shù)據(jù)窗口中上面表頭,Values是出現(xiàn)在數(shù)據(jù)窗口表格單元中的統(tǒng)計值;SourceData列表框中是可以使用的字段,使用鼠標選中并拖動到相應(yīng)的列表框即可。在Rows、Columns.Values三個列表框中都可以用鼠標雙擊已有字段,可以在接下來的對話框中輸入組合表達式。比如,使用year作為Columns是可以的,也可以雙擊然后在上面的窗口中輸入下面的表達式:year+〃年〃Graph:Graph顯示樣式的數(shù)據(jù)窗口可以以多種圖形樣式將數(shù)據(jù)顯示出來,例如餅圖、柱狀圖、折線圖等。Graph顯示樣式的數(shù)據(jù)窗口給用戶的感覺是使用方便、表達直觀。從開發(fā)者的角度來講,創(chuàng)建Graph顯示樣式的數(shù)據(jù)窗口也是很簡單的事情,所以在開發(fā)應(yīng)用程序時不要忘記這費力不多卻很受用戶歡迎的顯示樣式。創(chuàng)建Graph顯示樣式的數(shù)據(jù)窗口時,最重要的參數(shù)是Category、Values及Series。在創(chuàng)建向?qū)е锌梢灾付ㄟ@幾個參數(shù)。指明這三個參數(shù)的操作很簡單,在下拉列表框中選擇合適的字段即可。Category可以理解成顯示在橫向坐標鈾上的字段,Values可以理解成顯示在縱向坐標軸上的字段,而Series是橫向坐標軸上同組比較時的分組標準。Composite:這種顯示樣式的數(shù)據(jù)窗口可以將多種類型的、多個邏輯上毫不相關(guān)的數(shù)據(jù)窗口放置到一起,是一種靈活的數(shù)據(jù)表現(xiàn)形式。因為Composite顯示樣式的數(shù)據(jù)窗口不允許修改其中的數(shù)據(jù),所以不能用于數(shù)據(jù)錄入和數(shù)據(jù)修改,只能在報表時使用這種顯示祥式的數(shù)據(jù)窗口。使用這種顯示樣式的數(shù)據(jù)窗口創(chuàng)建報表,經(jīng)常將對同一問題不同表現(xiàn)形式的數(shù)據(jù)窗口或者是關(guān)系緊密的數(shù)據(jù)放到一起。例如,將幾個關(guān)鍵數(shù)據(jù)的統(tǒng)計結(jié)果以Graph顯示樣式顯示在最上面,用CrossTab類型的數(shù)據(jù)窗口將比較詳細的數(shù)據(jù)統(tǒng)計結(jié)果顯示在中間,然后是Grid類型的詳細數(shù)據(jù),這樣的報表數(shù)據(jù)表現(xiàn)能力要比任何單一的一種數(shù)據(jù)窗口要強得多。RichText:RichText祥式的數(shù)據(jù)窗口使數(shù)據(jù)庫中的數(shù)據(jù)和文字可以在一起排版,可以方便地特數(shù)據(jù)庫中的數(shù)據(jù)和文字內(nèi)容一起形成文檔、報告等;提供了很強的文字編輯處理能力,可以很方便地處理文字的多種格式:可以開發(fā)更有表現(xiàn)力的應(yīng)用系統(tǒng),自動生成報告、文檔資料,省去了使用PowerBuilder的應(yīng)用程序卻需要切換到其他文字處理軟件中的麻煩。OLE2.0:OLE是ObjectLinkandEmbedding的字頭縮寫,表示對象鏈接和嵌入。使用這種技術(shù),可以將其他軟件的功能引入到PowerBuilder開發(fā)的應(yīng)用程序中。PowerBuilder中不僅提供了OLE2.0顯示樣式的數(shù)據(jù)窗口,而且在窗口中提供了OLE2.0控件。例如,在數(shù)據(jù)庫中保存的圖像在OLE2.0顯示樣式的數(shù)據(jù)窗口中,可以借助一些專門的圖像處理軟件來處理,并可以把處理結(jié)果返回保存到數(shù)據(jù)庫中。只有當(dāng)數(shù)據(jù)庫的表中包含blob類型的字段時,才有必要使用OLE2.0顯示樣式的數(shù)據(jù)窗口。將blob類型的字段作為OLE2.0列,在處理其中的數(shù)據(jù)時,可以直接觸發(fā)調(diào)用相關(guān)的軟件進行處理,并能夠?qū)⑻幚斫Y(jié)果返回保存到數(shù)據(jù)庫中。例如,某字段中保存的是Excel文檔,可以創(chuàng)建OLE2.0顯示樣式的數(shù)據(jù)窗口,當(dāng)雙擊該字段時可以調(diào)用Excel,然后在Excel中編輯處理數(shù)據(jù),保存編輯結(jié)果返回到數(shù)據(jù)窗口時,可以將結(jié)果反映到數(shù)據(jù)窗口中。創(chuàng)建OLE2.0顯示樣式的數(shù)據(jù)窗口,需要指定三類參數(shù)。SourceData框中顯示的是所有可用字段,可以使用鼠標選中并拖動到其他兩個列表框中;Groupby列表框中顯示的是用來分組的字段,由于OLE2.0數(shù)據(jù)窗口的特殊性,它的分組不在設(shè)計時創(chuàng)建,只能在向?qū)е袆?chuàng)建;TargetData框中顯示的是在數(shù)據(jù)窗口中要顯示的字段,使用了分組,則對該框中的字段做統(tǒng)計(字符串型的列將統(tǒng)計記錄數(shù),數(shù)值型的列將統(tǒng)計累加和),沒有使用分組,則直接顯示它們的值。接下來要設(shè)置的是和OLE對象關(guān)系緊密的內(nèi)容////////////////////////////////////////數(shù)據(jù)窗口對象的畫板、band和層次數(shù)據(jù)窗口畫板整個數(shù)據(jù)窗口畫板由6個視窗構(gòu)成,分別是:Design:設(shè)計數(shù)據(jù)窗口對象視窗,可以使用菜單Design-Options來改變Design窗口的外觀Preview:預(yù)覽數(shù)據(jù)窗口的外觀,顯示相應(yīng)表中的對應(yīng)的數(shù)據(jù),及對數(shù)據(jù)的各種操作ControlList:數(shù)據(jù)窗口中所有的部件構(gòu)成的一個列表Data:顯示此數(shù)據(jù)窗口對象所對應(yīng)的表中的各個字段的值Propertie,:屬性ColumnSpecification:該視窗是個比較重要的視窗,可以增加、刪除、修改列的初始值、檢驗表達式或者校驗信息數(shù)據(jù)窗口對象的band數(shù)據(jù)窗口用帶-band將其分隔成四部分:Header:出現(xiàn)在每頁的頂端,用于顯示標題和列的題頭Detail:包含了數(shù)據(jù)窗口對象的主體,顯示了各行的數(shù)據(jù)和相關(guān)的標簽。在DataWindow對象高度的范圍內(nèi),細節(jié)條能夠按照需要自動擴大任意倍Footer:出現(xiàn)在每頁的底端,用來顯示文本和頁號Summary:出現(xiàn)在DataWindow對象的最后一頁,用來為整個數(shù)據(jù)窗口對象顯示總計和總和數(shù)據(jù)窗口對象的層次數(shù)據(jù)窗口分為三個層次,即背景層(background)、帶層(band)和前景層(foreground)o在數(shù)據(jù)窗口上放置的部件可以屬于任意一個層次,但如果設(shè)計不當(dāng),數(shù)據(jù)顯示會凌亂不堪。通常情況下,背景層放置繪圖對象以設(shè)置漂亮的背景;帶層放置字段、計算域、標簽等和報表內(nèi)容緊密相關(guān)的內(nèi)容,在運行狀態(tài)下,PowerBuilder會自動格式化帶層;前景層放置一些無需打印的內(nèi)容,最典型的是Graph部件。設(shè)置部件屬于哪個層的方法是首先選中部件,然后在屬性視窗中進入到Positon屬性頁,修改該部件的Layer屬性,在Layer下拉列表框中選擇適當(dāng)?shù)膶蛹纯?。不管哪個層上的對象,鼠標右鍵彈出菜單中都有SendtoBack和BringtoFont兩個選項。這兩個功能和層之間有什么關(guān)系呢?沒有任何關(guān)系!不管部件屬于哪個層,都可以使用這兩個菜單項,使用完后部件也不會屬于其他的層,只是重疊部件的前后關(guān)系發(fā)生了變化。所以當(dāng)部件沒有重疊時,使用這兩個菜單選項沒有什么意義,雖然這兩個菜單選項也可以使用。選中數(shù)據(jù)窗口上的部件不區(qū)分層。也就是說,選中操作不受層的影響,可以同時選中不同層上的部件。當(dāng)設(shè)置了較大的背景圖片時,可能不能使用拖動鼠標來直接選中多個對象,因為拖動時,鼠標的起點可能就在背景圖片上。解決方法是在所有操作都完成后再放置背景圖片,也可首先將背景圖片剪切掉,進行其他操作后再粘貼圖片,或者先將背景圖片拖到?jīng)]有其他對象的位置上,操作完成后再將圖片背景拖放到原來位置////////////////////////////////////////數(shù)據(jù)窗口對象及字段的修改屬性數(shù)據(jù)窗口只能修改一個數(shù)據(jù)表。當(dāng)數(shù)據(jù)窗口的數(shù)據(jù)來源于不止一個數(shù)據(jù)表時,可以用腳本控制數(shù)據(jù)窗口的修改屬性來對數(shù)據(jù)表逐個進行修改。當(dāng)數(shù)據(jù)窗口是用來接受用戶的手工錄入數(shù)據(jù)時,應(yīng)該設(shè)置兩方面的屬性才能確保數(shù)據(jù)窗口能夠用來修改數(shù)據(jù)表。一個是修改數(shù)據(jù)窗口的修改屬性,另一個是用戶可以修改的字段的相關(guān)屬性值數(shù)據(jù)窗口對象的修改屬性Rows->UpdateProperties如果數(shù)據(jù)窗口對應(yīng)的數(shù)據(jù)表中定義了主鍵或者唯一性索引,則數(shù)據(jù)窗口創(chuàng)建時默認的就是允許修改,并且正確設(shè)置了所有的修改屬性。否則就需要手工進行設(shè)置。當(dāng)增加、刪除、或者重新選擇了字段時,PB將數(shù)據(jù)窗口的的修改屬性為不允許,這時也應(yīng)該進行手工設(shè)置。AllowUpdates:允許更新。TabletoUpdate:指定要被更新的表。WhereClauseforUpdate/Delete配置如何在Update和DeleteSQL語句中構(gòu)造where子句1、KeyColumns當(dāng)開發(fā)單用戶應(yīng)用程序或者用戶都以加鎖方式訪問數(shù)據(jù)庫時可以選中該選項。該選項表示數(shù)據(jù)窗口只使用在"UniqueKeyColumn”列表框中指定的唯一列進行數(shù)據(jù)更新。使用這種方式來修改數(shù)據(jù)庫,并發(fā)性很高,不同的用戶都可以并發(fā)地訪問數(shù)據(jù)庫,但是數(shù)據(jù)的完整性卻非常差。因此要保護數(shù)據(jù)完整性,只有在單用戶程序或者加鎖訪問方式下才使用這種修改方式。如:在add_book(通訊錄)數(shù)據(jù)表中定義了4個字段,id為主鍵,name,address,telephone三個字段為可修改字段,有如下一條數(shù)據(jù)(001,陳,杭州,1395813)。若想把name改為“萬”,數(shù)據(jù)窗口產(chǎn)生如下的update語句:updateadd_booksetname='萬'whereid='001'2、KeyandUpdateableColumns這種修改方式是默認的修改方式,它用主鍵列和可以修改的列來創(chuàng)建where子句,具有很高的數(shù)據(jù)完整性,但是并發(fā)性不是太好。推薦使用這種修改方式。保存數(shù)據(jù)時將產(chǎn)生如下的SQL語句:updateadd_booksetname='萬’whereid='001'andname=’陳’andaddress='杭州’andtelephone='1395813'3、KeyandModifiedColumns該方法是上面兩種方法的折中,當(dāng)不同的用戶并發(fā)修改同一行數(shù)據(jù)的不同字段時,都能成功修改,所以它的并發(fā)性有了一定的限制,數(shù)據(jù)的完整性比第一種修改方式有所提高。這種修改方式使用主鍵和數(shù)據(jù)發(fā)生了變化的列來產(chǎn)生where子句。保存數(shù)據(jù)時產(chǎn)生如下的SQL語句:updateadd_booksetname='萬'whereid='001'andname='陳'KeyModification:該組框用來指定當(dāng)用戶修改了主鍵時,數(shù)據(jù)窗口如何來更新數(shù)據(jù)表中的主鍵字段。有兩種選擇UseDeletethenInsert和UseUpdate。第一個選項是先刪除原有的主鍵值,然后再使用新的主鍵值插入一個完整的行。使用這種更新主鍵的方式可以減少組織數(shù)據(jù)的工作量,但在數(shù)據(jù)庫中各個數(shù)據(jù)表之間存在父子制約關(guān)系,并且依賴該主鍵的外部鍵被指定為級聯(lián)刪除時,操作就不會成功的。因為級聯(lián)刪除方式要求當(dāng)依賴主鍵的外部鍵有數(shù)據(jù)時就不能刪除主鍵。當(dāng)DBMS允許更新主鍵列時,可以使用第二個選項,該選項直接修改主鍵值,所以防止了級聯(lián)刪除帶來的操作不成功的問題。UpdateableColumns:指定被更新的字段。當(dāng)數(shù)據(jù)窗口中的字段來自不止一個數(shù)據(jù)表時,這時一定要選擇同一個表中的字段,因為一個數(shù)據(jù)窗口一次只能更新一個數(shù)據(jù)表,當(dāng)數(shù)據(jù)窗口中增添了字段時,新增添的字段往往是不允許修改的,一定要在該列表框中選擇該字段。UniqueKeyColumn:選擇唯一標識一行的列。如果在定義數(shù)據(jù)表時定義了主鍵,單擊右面的"PrimaryKey”按鈕可以在該列表框中選中主鍵。IdentityColumn:該下拉列表框用于為下拉列表框中所指定的列(通常是主鍵列)生成序號,當(dāng)且僅當(dāng)DBMS支持序號生成時該作用才有效數(shù)據(jù)窗口對象字段的修改屬性**相關(guān)屬性數(shù)據(jù)窗口中字段的相關(guān)屬性:1、字段的TabOrder值2、字段的Protect屬性3、字段的DisplayOnly屬性4、字段的Visible屬性上述屬性前3個中任意一個都可以讓用戶無法修改字段中的數(shù)據(jù):最后一個屬性決定字段是否可見,不可見的字段不管其他屬性如何設(shè)置.用戶都無法修改字段中的數(shù)據(jù)。當(dāng)字段的TabOrder值為0時,肯定不能獲得焦點,但是非0時也不一定能獲得焦點,還得看字段的Protect屬性是否設(shè)置為1;當(dāng)字段的TabOrder值不為0,Protect屬性不為1并且字段的Visible屬性為True時,肯定可以獲得焦點。DisplayOnly屬性和焦點是否能夠獲得無關(guān)(即選中Displayonly時可以選中字段,可以復(fù)制,但不能更新)。**數(shù)據(jù)保護可以用以下三種方法將字段設(shè)置為用戶不可修改的字段:在數(shù)據(jù)窗口設(shè)計時將這些字段的TabOrder值置為0,以使該字段不能獲得焦點,用戶無法選中和編輯該字段。將字段的DisplayOnly屬性設(shè)置為True。該字段可以獲得焦點,可以選中該字段,還可以拷貝復(fù)制該字段的內(nèi)容,但不能編輯該字段中的內(nèi)容。設(shè)置字段的Protect屬性。字段的Protect屬性如果設(shè)置為“1”,則該字段的TabOrder值即使不是0也不會得到焦點。使用該屬性可以保護一些重要的數(shù)據(jù)。////////////////////////////////////////數(shù)據(jù)窗口對象的字段操作字段的編輯類型PB提供了六種編輯類型:Edit是字段的缺省編輯類型,可以用于所有類型的字段上。CheckBox編輯類型在這里是一種狀態(tài)選擇,可以為其規(guī)定選中和非選中狀態(tài)時的文字,當(dāng)字段的輸入內(nèi)容非此即彼時,可以使用這種編輯類型。DropDownDW是一種用來限制用戶輸入數(shù)據(jù)的非常好的編輯方式,用戶只能通過選擇錄入數(shù)據(jù),并且選擇的數(shù)據(jù)來自其他數(shù)據(jù)窗口的某字段,從而可以確保數(shù)據(jù)的一致性和正確性。當(dāng)錄入外部鍵時,經(jīng)常使用這種編輯類型。使用這種方式可以增強程序的適應(yīng)性和靈活性。DropDownListBox在外觀上和DropDownDW類型相同,但它的數(shù)據(jù)不會發(fā)生變化,是固定的,適合用來錄入諸如學(xué)歷、省份、月份等范圍固定的數(shù)據(jù)項。EditMask經(jīng)常用來錄入整型或日期型數(shù)據(jù)。它底優(yōu)勢在于可以給用戶提供清晰的數(shù)據(jù)格式,對用戶的操作有很強的提示性;還可以為該編輯類型設(shè)置Spin,以便用鼠標單擊上下箭頭來增大或減小數(shù)據(jù)。RadioButtons在錄入取值為比較小范圍內(nèi)的數(shù)據(jù)經(jīng)常使用,用戶使用鼠標進行選擇操作即可錄入數(shù)據(jù),操作比較方便。字段的編輯格式1、Limit-限制輸入長度可以規(guī)定在該字段中輸入的信息長度,缺省是字段在數(shù)據(jù)表中定義的長度。如果在數(shù)據(jù)窗口創(chuàng)建以后又添加了字段,這時缺省長度是0,這時用戶所能輸入的長度取決于編輯框的長度(如果沒有設(shè)置字段的AutoHorzScroll屬性或者設(shè)置了該屬性并且Limit屬性為0,則用戶輸入的最大長度取決于編輯框所能接受的最大長度),應(yīng)該手工修改其限制長度為字段在表中定義的長度。修改方法是,在字段屬性窗口的Edit頁Limited輸入框中輸入一個整數(shù)即可2、DisplayOnly-不允許用戶修改選中字段對應(yīng)屬性窗口中的DisplayOnly選項即可。在程序運行時,該字段中的內(nèi)容可以顯示,并且可以獲得焦點,但是用戶不能修改字段的內(nèi)容,從而起到保護數(shù)據(jù)的作用。建議使用這種方式來保護字段中的數(shù)據(jù),雖然不能編輯字段內(nèi)容,但可以選中并復(fù)制,比設(shè)置字段的TabOrder值有更多的靈活性3、Required-必須輸入有些信息要求用戶必須輸入,這時可以選中字段的Required屬性。不輸入數(shù)據(jù)就無法離開該字段。4、Password-密碼輸入選中字段屬性窗口中Edit頁上的Password屬性即可,字段上數(shù)據(jù)顯示為“*”號5、Format-格式屬性視圖中Edit屬性頁中包含F(xiàn)ormat屬性,并且還有一個專門的Format屬性頁。Edit屬性頁的Format屬性可以設(shè)置字段編輯時的顯示格式,F(xiàn)ormat屬性頁中的Format設(shè)置字段不被編輯時的顯示格式。Format的設(shè)置:Numbers:可以使用“0”、“#”、“.”和一些算術(shù)符號來表示,使用保留字“[general]”或者“[Currency]”時,PB將使用操作系統(tǒng)的設(shè)置格式。關(guān)于操作系統(tǒng)的格式,Windows可以在控制面板的區(qū)域設(shè)置中修改。[General]5-50.505-510.005.00-5.000.50札##05-51#,##0.005.00-5.000.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.500%500%-500%50%0.00%500.00%-500.00%50.00%0.00E+005.00E+00-5.00E+005.00E-01Strings:可以用兩部分來表示該類型數(shù)據(jù)的顯示,前面是必需部分,后面是NULL時表示。“@”代表一個字符。如:〃[red](@@@)@@@-@@@@〃Dates:使用幾個特定的字母代表特定的含義,它們的組合構(gòu)成Data類型的格式。d表示天的數(shù)字,沒有前綴09dd表示天的數(shù)字,有前綴009ddd星期幾的英文縮寫Mondddd星期幾的英文全稱Mondaym沒有前綴0的月份6mm有前綴0的月份06mmm月份的英文縮寫Junmmmm月份的英文全稱Juneyy兩位數(shù)字表示的年份97yyyy四位數(shù)字表示的年份1997兩位的年份如果小于50,PB則認為是21世紀;大于50則認為是20世紀。比如,“85”表示的年份PB認為是“1985”年;“40”表示的年份PB認為是“2040”。Times:使用幾個特定的字母代表特定的含義,它們的組合構(gòu)成Time類型的格式。h沒有前綴0的表示小時的數(shù)字hh有前綴0的表示小時的數(shù)字m沒有前綴0的表示分鐘的數(shù)字,必須出現(xiàn)在h或者hh之后mm有前綴0的表示分鐘的數(shù)字,必須出現(xiàn)在h或者hh之后s沒有前綴0的表示秒的數(shù)字,必須出現(xiàn)在m或者mm之后ss有前綴0的表示秒的數(shù)字,必須出現(xiàn)在m或者mm之后ffffff沒有0前綴的毫秒,必須出現(xiàn)在s或者ss之后AM/PM兩個大寫的縮寫字母,代表上午和下午am/pm兩個小寫的縮寫字母,代表上午和下午A/P一個大寫的縮寫字母,代表上午和下午a/p一個小寫的縮寫字母,代表上午和下午6、AutoSelection-自動選中當(dāng)字段獲得焦點時,自動選中當(dāng)前行字段中的內(nèi)容,這在需要刪除或者拷貝時用處比較大。選中字段對應(yīng)屬性窗口中Edit頁上的autoselection即可。7、設(shè)置滾動條AutoHorzScroll--自動橫向滾動AutoVertScroll--自動縱向滾動HorzScrollBar--橫向滾動條VertScrollBar--縱向滾動條8、UseCodeTable-使用CodeTable使用CodeTable可以自動轉(zhuǎn)換用戶的輸入信息,也可以校驗用戶的輸入信息是否正確。a)選中字段的UseCodeTable屬性b)在CodeTable中定義代碼表,該輸入框中包括兩列,DisplayValue用來進行顯示,DataValue是和該顯示值對應(yīng)的實際值,是保存在數(shù)據(jù)庫中的值。c)選中Validate選項,從而可以確保用戶的輸入必須是代碼表中定義了的,否則就出現(xiàn)報錯信息。9、ShowFocusRectangle-顯示焦點邊框焦點邊框就是當(dāng)字段獲得焦點時,在字段編輯框的周圍顯示一個矩形邊框,可以醒目地提醒用戶當(dāng)前的輸入位置,這是一個比較好的界面,建議使用該屬性。選中字段對應(yīng)屆性窗口Edit頁中的ShowFocusRectangle即可。Tabular默認選中10、Accelerator-設(shè)置加速度可以為字段設(shè)置加速鍵,以便很快捷地定位到特定的字段上。只要在字段對應(yīng)屬性窗口Edit頁的Accelerator編輯框中輸入字母或數(shù)字即可,只能輸入一個字符。加速鍵由Alt和所輸入的字母或數(shù)字構(gòu)成。程序運行時,使用加速鍵可以將焦點馬上轉(zhuǎn)移到有該加速鍵的字段上。11、Case-選擇大小寫可以給字符型字段指定大寫、小寫、還是原樣顯示輸入內(nèi)容。在字段對應(yīng)的屬性窗口Edit頁中的Case下拉列表框中選擇即可°Up代表始終大寫,Any代表原樣,Lower代表小寫。增加和刪除字段進入數(shù)據(jù)窗口對象的SQLSelect畫板后可以對字段進行以下三種操作:1、增加字段2、刪除字段3、重選字段。取消某字段,再重新選中該字段。這看起來好像沒有什么作用。實際上,這樣做可以同步數(shù)據(jù)窗口對象和數(shù)據(jù)表的定義。當(dāng)創(chuàng)建了數(shù)據(jù)窗口后又修改了該數(shù)據(jù)窗口對象對應(yīng)數(shù)據(jù)表中某字段的定義,例如,增加了字段的長度,這是應(yīng)該保證字段和數(shù)據(jù)窗口中的定義一致,使用上面的方法就可以做到數(shù)據(jù)的一致*當(dāng)添加字段時,PB不能正確設(shè)定新添加字段的默認屬性,必須認真檢查新添加的屬性,最重要的屬性是Limit的大小以及ShowFocusRectangle、AutoSelection和AutoHorzScroll屬性是否選中。如果數(shù)據(jù)窗口對應(yīng)的數(shù)據(jù)表中既沒有定義主鍵也沒有定義唯一性索引,并且數(shù)據(jù)窗口還是用來進行數(shù)據(jù)錄入的,這時不管是刪除了數(shù)據(jù)窗口中的字段或添加了字段,還是重新選擇了字段,都要仔細檢查并重新設(shè)置數(shù)據(jù)窗口的Update屬性了,如果數(shù)據(jù)表中定義了主鍵或者唯一性索引,就不用考慮這個問題了。字段的顯示順序在大多數(shù)顯示樣式的數(shù)據(jù)窗口中都可以使用鼠標拖放直接改變字段的位置,惟獨grid類型的數(shù)據(jù)窗口在Design窗口中不能。解決方法是,在預(yù)覽窗口中拖動字段到適當(dāng)?shù)奈恢?,Design窗口中的字段順序就會自動做相應(yīng)的調(diào)整??梢杂米侄蚊蛘咦侄翁杹順俗R一個字段。例如,產(chǎn)生數(shù)據(jù)窗口的SQL語句是:selectname,sex,addressfromaddr_book;在該數(shù)據(jù)窗口中,name和#1都是指同一個字段。顯示位置的調(diào)整不會影響字段號,字段號和產(chǎn)生數(shù)據(jù)窗口的SQL語句中字段的順序相對應(yīng),在SQL語句中,第一個字段對應(yīng)的字段號為#1,依次增加一個。要調(diào)整字段號的順序,可以進入到SQLselect畫板,取消所有字段,再按照正確的字段順序重新選擇字段;或者切換到語法狀態(tài),手工修改SQL語法中字段的順序。經(jīng)過這樣的調(diào)整后,可能字段在數(shù)據(jù)窗口中顯示的順序沒有變化,但是字段號卻進行了重新分配。因為在窗口腳本中引用數(shù)據(jù)窗口的數(shù)據(jù)時,有可能用到字段號,在數(shù)據(jù)窗口的計算域中也有可能用到字段號,所以要保證字段號正確設(shè)定,尤其是習(xí)慣使用字段號引用數(shù)據(jù)時。////////////////////////////////////////計算域是指在數(shù)據(jù)窗口的設(shè)計狀態(tài)下添加到數(shù)據(jù)窗口中的ComputedField部件,它是一個數(shù)據(jù)窗口部件,具有部件的屬性特征。計算字段是指在數(shù)據(jù)窗口對應(yīng)的SQL語句中添加的表達式,計算字段是一個字段,它具有字段的屬性特征。它們的區(qū)別主要體現(xiàn)在腳本中。計算字段因為具有字段的特征,所以SetItem等對字段操作的函數(shù)可以用來操作計算字段而不能來操作計算域,當(dāng)需要在程序中動態(tài)設(shè)置值時,就應(yīng)該使用計算字段而不能使用計算域,典型情況是對計算出來的值進行誤差校正。這兩個對象都可以使用GetItem一類的函數(shù)來讀取取值。常用函數(shù):條件判斷If(boolean,truevalue,falsevalue)Case(columnWHENvalue1THENresult1(WHENvalue2THENresult2{...})(ELSEresultelse})累積,(表格最右面一列各行是某列對應(yīng)行前面所有行的累加和)CumulativeSum(column{forrange})其中,column是列名、列號,或者是由列名、列號、常量、運算符,甚至其他函數(shù)構(gòu)成的表達式,但取值必須是數(shù)值型的。Forrange是進行累積的范圍。大多數(shù)顯示樣式的數(shù)據(jù)窗口都可以使用如下內(nèi)容。All:缺省值,累積指定列的所有取值Groupn:在指定的分組內(nèi)對指定字段進行累積運算。Group是保留字,n代表組號,如1。Page:在頁范圍內(nèi)進行累積運算。百分比Percent(column(FORrange(DISTINCT(expres1{,expres2{,...}}}}})Percent可以用來計算某字段在指定范圍內(nèi)當(dāng)前行的取值占該范圍內(nèi)該字段累計和的比例。其中,column以及Forrange和上面CumulativeSum函數(shù)中的完全相同。選項DISTINCT用來指定只統(tǒng)計不相等的字段,表達式expresX是用來區(qū)分行是否相同的標準。該函數(shù)和表達式column/sum(columnforrange)是等價的。CumulativePercent(column{FORrange})用來計算當(dāng)前的累積和占總和的比例其中的column和forrange和上面的相同。該函數(shù)和下面的表達式是等價的:CumulativeSum(columnforrange)/sum(columnforrange)引用不同行的數(shù)據(jù)在數(shù)據(jù)窗口的表達式中,可以直接使用列名數(shù)組引用不同行的字段值,下標是一個相對數(shù),相對于當(dāng)前行而言的。例如,假設(shè)在數(shù)據(jù)窗口中有一列名為product_id,在數(shù)據(jù)窗口表達式中,product_id和product_id[0]是指當(dāng)前行的product_id值。product_id[-1]是指前面一行的product_id值,product_id[1]是指下一行的product_id值。使用這種引用方法,可以很簡潔地提供更友好的數(shù)據(jù)顯示格式。例如,當(dāng)product_id改變時,用另外一種顏色顯示月份、銷售量、庫存量等,可以修改這些字段的顏色表達式(應(yīng)該以product_id排序):if(getrow()=1,rgb(255,0,0),if(product_id=product_id[-1],rgb(255,0,0),rgb(255,255,255)))數(shù)據(jù)行的修改狀態(tài)isRowNew()isRowModified()if(isRowNew(),'新',if(isRowModified(),'改','舊'))其他dateisSelectedaveragecountsum////////////////////////////////////////排序、過濾和分組排序Rows->Sort*雙擊Columns列表框中的字段或表達式,進入ModifyExpression窗口,可以進行表達式定義,表示要使用該表達式進行排序。上面的方法定義的排序是在客戶端執(zhí)行的,要在服務(wù)器端進行數(shù)據(jù)排序,可以通過修改數(shù)據(jù)窗口對應(yīng)的SQL來實現(xiàn)。過濾Rows->Filter在對話框中輸入表達式,在定義表達式時,有些經(jīng)常使用的運算符,如like、betweem、in、match等需要特別關(guān)注一下。*特別是match具體可以在程序中測試,具體見PB幫助-match。上面的方法同排序是在客戶端執(zhí)行的,要在服務(wù)器端進行數(shù)據(jù)排序,可以通過SQL語句中使用where子句,然后用帶參數(shù)的retrieve來過濾。分組Rows->CreateGroup*雙擊"Columns”列表框中的字段或表達式,進入ModifyExpression窗口,進行表達式定義。創(chuàng)建分組后,數(shù)據(jù)窗口中又增加了兩個帶(band),Headergroupname用來先死組名,放置用來分組的表達式或者字段;Trailergroupname放置分組的總結(jié)信息。數(shù)據(jù)窗口創(chuàng)建后定義的分組和使用分組樣式創(chuàng)建的數(shù)據(jù)窗口在顯示效果上相同,區(qū)別在于前面一中方式是在數(shù)據(jù)完全從服務(wù)器端傳送到客戶端后進行的,后一種是直接在服務(wù)器按照分組取出數(shù)據(jù)的。*最后介紹一種方法,同樣可以達到Group的效果。比如,顯示各個地區(qū)產(chǎn)品銷售情況的數(shù)據(jù),應(yīng)該使用地區(qū)作為分組。在數(shù)據(jù)窗口畫板中選擇窗口菜單Rows->Sort,選擇以字段"region”進行排序;然后再選擇窗口菜單Rows->SupressReaptingvalues…,指定壓縮字段“region"的重復(fù)值即可。////////////////////////////////////////其他數(shù)據(jù)窗口中的當(dāng)前頁和總共頁stringls_currentPageNostringls_totalPagels_currentPageNo=dw_1.Describe(〃evalue('page()',1)〃)//??獲取當(dāng)前頁號ls_totalPage=dw_1.Describe(〃evalue('PageCount()',1)〃)//獲取總共多少頁數(shù)據(jù)窗口對象的中備份和恢復(fù)數(shù)據(jù)備份:File->SaveRowsAs//或Preview窗口中右鍵->SaveRowsAs恢復(fù):Rows->Import////////////////////////////////////////[PB]-數(shù)據(jù)窗口對象(二)=獲取數(shù)據(jù)窗口信息※函數(shù)Describe使用函數(shù)Describe可以獲取數(shù)據(jù)窗口對象中的信息。該函數(shù)語法是:dwcontrol.Describe(propertylist)其中,dwcontrol是數(shù)據(jù)窗口控件名稱,propertylist是以空格分隔的特性或運算表達式列表,它用來報告列與圖形對象的屬性值。表達式可以用特定行與列的值進行運算。Describe函數(shù)返回的是一個字符串,該字符串是對指定屬性的描述,不同的屬性占用不同的行(不同屬性用?n分隔)。如果有無效屬性則返回該屬性之前的屬性取值和一個驚嘆號(!)。如果某個屬性沒有值,則返回一個問號(?)。如:dw_1.describe("datawindow.bandsdatawindow.objects")header~tdetail~tsummary~tfooter~nemp_id~temp_iddw_1.describe("datawindow.banddatawindow.objects")!dw_1.describe("datawindow.bandsdatawindow.object")header~tdetail~tsummary~tfooter!如果特性值容易引起混淆,例如,帶有感嘆號、問號、Tab鍵或換行符,這些符號在返回字符串中將用引號括起來。為了測試這種情況,先給數(shù)據(jù)窗口中的標簽name_t中輸入內(nèi)容為name?,然后使用下面的語句:dw_1.describe(〃name_t.text〃)上面的語句顯示"name?”,這是因為如果值列表中的第一個值用引號引著,那么該特性列表中的剩余值也用引號引著。*標簽name_t和addr_t中分別輸入內(nèi)容為name?和zjhzdw_1.describe("name_t.textaddr_t.text")"name?"zjhzdw_1.describe("addr_t.textname_t.text")zjhz"name?"*最后不顯示空格(?n)※對列的引用在屬性描述時,經(jīng)常要對列進行引用。引用列的方法有兩種,或者使用列名,或者使用列號。應(yīng)盡量避免使用列號,因為列號是和創(chuàng)建數(shù)據(jù)窗口時選擇字段的順序相對應(yīng)的。在以后的修改中很有可能取消某些字段或者調(diào)整字段的選擇順序,或者改變數(shù)據(jù)源,這時就很容易出現(xiàn)錯誤,更糟糕的是這時很有可能沒有錯誤信息,張冠李戴了。下面是一個使用列號進行屬性描述的語句:dw_1.describe("#5.coltype")這種語法可以和函數(shù)getcolumn搭配使用,用來檢索當(dāng)前列號。下面是一個顯示數(shù)據(jù)窗口中所有字段類型的例程:integerli_count,li_indexli_count=integer(dw_1.describe("datawindow.column.count"))forli_index=1toli_countmessagebox(string(li_index),dw_1.describe(〃#〃+string(li_index)+"coltype"))next※函數(shù)Evaluate在使用Describe描述數(shù)據(jù)窗口對象中的相關(guān)信息時,有一個非常重要的函數(shù)不能不掌握,就是Evaluate。雖然函數(shù)Describe可以獲取對象的信息,但是表達式的取值就不能正常讀取了,而這又是經(jīng)常遇到的。所以,函數(shù)Evaluate非常重要,它可以使函數(shù)Describe獲取表達式的取值。該函數(shù)的語法是:Evalute('expression',rowno)其中,expression是屬性表達式,rowno是要描述的行號。該函數(shù)放置在Describe的屬性列表中。例如,判斷第3行的salary工資是否大于1000,如果大于則返回1,否則返回0,可以使用下面的語句:dw_1.describe("evaluate('if(salary>1000,1,0)',3)")而使用下面的語法就是錯誤的:dw_1.describe("if(salary>1000,1,0)")*單行(如第二行)dw_1.describe("evaluate('if(isnull(emp_no)oremp_no='',~~'*~~',emp_no)',2)")*多行l(wèi)ongll_istringls_empforll_i=1todw_1.rowcount()ls_emp=dw_1.describe("evaluate('if(isnull(emp_no),~~'NULL~~',emp_no)',"+string(ll_i)+")")dw_1.setitem(ll_i,'emp_no',ls_emp)next※函數(shù)LookUpDisplay字段使用了下拉列表框、下拉數(shù)據(jù)窗口和單選按鈕等有代碼表的編輯風(fēng)格時,在數(shù)據(jù)窗口控件上顯示的值和字段實際得到的值并不相同,使用函數(shù)GetItemX只能讀取這樣的字段的真實取值,而不是用戶看到的值。如何才能讀取用戶看到的值?可以使用函數(shù)LookUpDisplay。LookUpDisplay函數(shù)不能直接從PowerScript調(diào)用,可以在Describe和Evaluate函數(shù)配合使用。因為函數(shù)LookUpDisplay不能指定對哪行數(shù)據(jù)進行操作,它的參數(shù)只有一個字段名稱,所以必須和Evaluate函數(shù)配合使用。該函數(shù)的語法是:LookUpDisplay(columnname)其中,參數(shù)columnname是字段的名稱,而不是一個字符串。函數(shù)執(zhí)行錯誤則返回空字符串。下面是一個和函數(shù)GetItemString相比較的例子。假設(shè)在一個數(shù)據(jù)窗口中定義字段sex的編輯風(fēng)格為DropDownListBox,定義該字段使用編碼表,編碼表的定義是顯示值“Male”,“Female”分別對應(yīng)“男”和“女”。然后,在某個按鈕的clicked事件中編寫如下腳本:messagebox(〃getitemstring:〃+dw_1.getitemstring(1,〃sex〃),〃lookupdispaly:〃+dw_1.describe(〃evaluate(Tookupdisplay(sex)',1)〃))::getitemstring:男::lookupdisplay:male=修改數(shù)據(jù)窗口信息為了在運行時修改數(shù)據(jù)窗口對象特征,應(yīng)該使用Modify函數(shù),而不是直接訪問語法。該函數(shù)的語法如下:dwcontrol.Modify(modstring)其中,dwcontrol是數(shù)據(jù)窗口控件名稱,既可以是數(shù)據(jù)窗口也可以是子數(shù)據(jù)窗口,還可以是datastore對象。modstring是修改字符串,用來指示要修改哪些對象的哪些屬性。如果修改成功函數(shù)則返回空字符串,如果修改的語法錯誤則返回對錯誤的描述,格式是:linenColumnincorrectsyntax,這里是第n列是從modstring開始計數(shù)的錯誤位置。數(shù)據(jù)窗口對象可以在運行時使用合適的語法修改其外觀、行為和數(shù)據(jù)庫信息。通過提供完整的對象規(guī)范,甚至可以在數(shù)據(jù)窗口對象內(nèi)部創(chuàng)建和刪除對象。使用modstring參數(shù)可以指定Create、Destroy和Attributealteration三種類型的語句?!鶆?chuàng)建對象可以使用下面的語法來添加對象(如文本、計算域以及位圖):Createobject(settings)其中,settings為將要創(chuàng)建的對象定義的一組特性和值,定義對象時,用戶必須提供足夠的信息。想要得到某個對象的正確語法的最好的方法就是導(dǎo)出一個包含對象的簡單的數(shù)據(jù)窗口。然后就能把對象的語法剪切并粘貼到應(yīng)用程序中。另一種辦法是使用那些能成為數(shù)據(jù)窗口內(nèi)特定對象顯示語法的許多工具之一(它們正變得越來越商業(yè)化)。下面的示例用來說明這種格式,假設(shè)用戶剛剛從頭開始動態(tài)地創(chuàng)建了一個完全新的數(shù)據(jù)窗口,現(xiàn)在需要在標題頭放置一個公司標志,其語法是:stringls_modify,ls_resultls_modify="Createbitmap(band=backgroundfilename='c:\logo.bmp,x='60'y='8'width='1308'height='513'border='0'name=logo)"ls_result=dw_1.modify(ls_modify)ifls_result<>""thenmessagebox("提示",ls_result)endif這段代碼為用戶剛剛創(chuàng)建的報表數(shù)據(jù)窗口在恰當(dāng)?shù)奈恢脛?chuàng)建標識?!鶆h除對象除了可以在數(shù)據(jù)窗口內(nèi)創(chuàng)建對象外,還可以使用下面語法刪除對象:Destroy[Column]object這里的object是數(shù)據(jù)窗口對象內(nèi)要刪除對象的名字。若要把列和列的數(shù)據(jù)從緩沖區(qū)中刪除,需要指定Column關(guān)鍵字。例如,上一個示例中向動態(tài)創(chuàng)建的報表中添加了一個公司標志。如果用戶把這一功能作為運行時的選項,比如說通過復(fù)選框,那么就不僅需要能夠創(chuàng)建對象而且還需要刪除該對象。下面是用于刪除的代碼:stringls_resultls_result=dw_1.modify("destroylogo")ifls_result<>""thenmessagebox("錯誤”,ls_result)endif下面的示例使用這種modify格式刪除列及其相關(guān)的標簽:stringls_resultls_result=dw_1.modify("destorycolumnsalarydestroysalary_t")ifls_result<>""thenmessagebox("錯誤”,ls_result)endif※特性修改Attributealteration類型的語句格式是modify三種格式中最常用的一種,這種語法的格式如下:objectname.attribute=value按照被影響的attribute的不同,value可以是下面類型中的任何一種:常量:指簡單的、不使用表達式的特性修改值。如:columnname.band=footer帶引號的常量:也是指簡單的特性修改值。如:columname.height='65'表達式:由一個默認值及其后的表達式組成,它的返回值與特性的數(shù)據(jù)類型相同。如:T67725~tif(emp_status=~'A~',255,16777215)'請注意這種表達式的格式。整個表達式括在單引號中,表達式需要缺省值,而且該值通過Tab鍵(?t)與余下的表達式隔開。表達式返回0或者1,它們是特性的有效值。在實際使用時,這種格式的語句經(jīng)常簡單寫成屬性訪問格式。如:dw_1.modify("oval_1.background.color=rgb(255,0,128)")和以下直接屬性訪問方式是等價的:dw_1.object.oval_1.background.color=rgb(255,0,128)=字段和計算域的屬性-更多見幫助(DataWindowobjectproperties)*獲取字段的類型(Coltype屬性)字段的ColType屬性是一個非常有用的屬性,使用該屬性可以在程序運行時獲取字段的類型。但是不能在運行時修改該屬性。下面是它的語法:直接引用:dw_1.object.object.objectname.coltype在Describe函數(shù)中:"objectname.coltype”不管使用哪種方式,對同一個字段獲得的類型都相同。字段類型有char(n),date,datetime,decimal(n),int,long,number,real,time,timestamp及ulong共11種,其中的n代表字符的長度或者小數(shù)后的精度。如:ls_coltype=dw_1.objcet.emp_id.coltypels_coltype=dw_1.describe(〃emp_id.coltype〃)在實際編程中,獲取字段的類型后,緊接著使用choosecase語句針對不同的類型進行相關(guān)的處理。*背景屬性(perty)在運行時修改字段的背景,這是標識特殊數(shù)據(jù)行的一種手段。使用該屬性可以在程序運行時獲取字段的背景,也可以修改字段的背景。它的語法如下:直接弓I用:dw_1.perty在Describe和Modify函數(shù)中:"perty{='value'}”其中,property可以是color或者mode。當(dāng)為color時取值應(yīng)該是長格式表示的顏色,或者使用RGB函數(shù)中紅、綠、藍表示的顏色;當(dāng)為mode時,0表示將背景設(shè)置為不透明的(即可以顯示背景顏色),1表示背景為透明的。實際上,字段的背景屬性也可以在數(shù)據(jù)窗口畫板中進行設(shè)定。下面是修改和讀取字段背景屬性的實例://修改字段的背景顏色dw_1.object.oval_1.background.color=rgb(255,0,128)dw_1.modify("emp_name.background.color='11665407'")//這里好象不能用rgb()//讀取字段的背景顏色ls_data=dw_1.describe("oval_1.background.color")//讀取字段的背景模式ls_data=dw_1.describe("emp_name.background.mode")//設(shè)置字段的背景模式dw_1.modify("emp_name.background.mode='1'")dw_1.modify("mdrect_1.background.mode='0'")*指定檢索規(guī)則(Cperty屬性)在腳本運行時,可以控制是否顯示檢索規(guī)則窗口或者讀取數(shù)據(jù)窗口這方面的信息。語法如下:直接引用:dw_1.perty在describe和modify函數(shù)中:"perty{=value}"其中,dw_1是數(shù)據(jù)窗口控件名稱,columnname是要獲取或者設(shè)置檢索規(guī)則的字段名稱,value為yes或者no,property是以下屬性:Dialog:是否顯示檢索規(guī)則窗口。取值為yes則顯示,取值為no則不顯示。如,在一個數(shù)據(jù)窗口中放置了字段name,可以編寫如下腳本:dw_1.modify("name.criteria.dialog=yessex.criteria.override_edit=yes")dw_1.retrieve()腳本運行,顯示檢索規(guī)則輸入窗口override_edit:是否用戶必須在檢索規(guī)則窗口中輸入數(shù)據(jù)。取值為yes則用戶必須輸入數(shù)據(jù),取值為no時用戶可以不輸入數(shù)據(jù)。required:是否用戶只能使用等號進行查詢。如果取值為yes則用戶的輸入只能是等號,如果取值為no則用戶可以使用各種符號,包括二、<>、>、>=、<二、<*Edit風(fēng)格的字段屬性(Eperty屬性)編輯風(fēng)格為Edit類型的字段,可以通過perty來獲取其相關(guān)信息或者設(shè)置其外觀及動作。下面是它的語法:直接弓I用:dw_1.perty在describe和modify函數(shù)中:"perty{=value}"其中,columnname是喲啊讀取或者設(shè)置屬性的字段名稱,value根據(jù)property不同而可以使用不同類型的值。property可以有17個取值,其中:和滾動控制有關(guān)的有AutoHScroll,AutoVScroll,HscrollBar和VscrollBar,它們的取值都是yes或者no,表示是否顯示該滾動條。和顯示的內(nèi)容有關(guān)的屬性有Case,CodeTable,F(xiàn)ormat,NillsNull和Password,這些屬性用來控制字段中的內(nèi)容如何顯示。Case的取值為Any,Upper,Lower與Painter,表示不管用戶在該字段上輸入的大小寫,都按照該屬性自動進行轉(zhuǎn)換。CodeTable的取值為yes或者no,表示該字段是否有代碼表。Format規(guī)定對用戶輸入的內(nèi)容進行格式化時應(yīng)該采用的格式。NillsNull的取值為yes或者no,表示當(dāng)用戶在字段中不輸入內(nèi)容而離開該字段時,是否將該字段中的內(nèi)容自動置為NULL。Password屬性的取值也是yes或者no,表示是否將用戶的輸入作為密碼樣式顯示,如果作為密碼則用戶的輸入內(nèi)容作為*號顯示,顯示的個數(shù)和用戶輸入字符個數(shù)相等。和編輯控制有關(guān)的屬性有AutoSelect,DisplayOn1y,F(xiàn)ocusRectangle,Limit,Required,Style和ValidateCode,除了Limit取值為正整數(shù)、Stylee取值為String類型外,其他屬性的取值都是yes或者no。AutoSelect屬性表示當(dāng)字段獲得焦點時是否自動選中該單元中的內(nèi)容。Display0nly表示是否允許用戶修改該字段中的內(nèi)容,如果取值為yes,則用戶雖然可以選中該字段中的內(nèi)容但是不能修改。FocusRectangle表示當(dāng)字段獲得焦點時是否顯示矩形的邊框,以表示當(dāng)前焦點的位置。Limit是一個相當(dāng)重要的屬性,用來限制用戶可以輸入字符的長度。Required屬性如果為yes,則在獲得焦點后用戶不輸入內(nèi)容就休想離開。雖然該屬性可以很好地保證非空字段不為空,但該屬性非常不友好,建議慎重使用。Style屬性在程序運行時不能修改,只能讀取其中的信息。該屬性返回的是關(guān)于字段的編輯風(fēng)格。ValidateCode屬性表示是否使用代碼表進行有效性校驗。該屬性當(dāng)CodeTable屬性為yes時才有效。下面是關(guān)于該屬性的一些實例:ls_setting=dw_1.objcet.emp_name.edit.autohscroll//是否允許自動橫向滾動ls_setting=dw_1.describe("emp_name.edit.Autohscroll")〃同上dw_1.object.emp_name.edit.required="no"http://將字段設(shè)置成必須輸入的字段dw_1.modify("emp_name.edit.required=no")//同上*字段的顯示格式(Format屬性)可以使用Format屬性來指定字段的顯示格式。但是,在實際編程中使用更多的是函數(shù)GetFormat或者SetFormat,以取代Modify或者Descrie來設(shè)置字段的顯示格式。該語法使用時的重點在于格式串的使用。下面是相關(guān)的語法:直接弓I用:dw_1.object.objectname.format在函數(shù)describe和modify中:"objectname.format{='value'}”其中,objectname是字段或者計算字段或者計算域的名稱value是字符型的表達式,取值是一種格式串。下面是一些使用實例:一ls_setting=dw_1.object.phone.format〃讀取字段的電話顯示格式ls_setting=dw_1.describe(〃phone.format〃)dw_1.object.shipdate.format="yyyy-mm-dd"http://設(shè)置日期格式dw_1.modify("shipdate.format='yyyy-mm-dd'")*設(shè)置數(shù)據(jù)窗口修改時的主鍵(key屬性)該屬性在一個數(shù)據(jù)窗口修改多個表時非常有用,因為這時必須根據(jù)要修改的表動態(tài)修改主鍵,屬性key就可以實現(xiàn)該功能。該屬性使用時的語法如下:直接引用:dw_1.object.columnname.key在函數(shù)modify或者describe中:"columnname.key{=value}"其中,columnname是要作為主鍵的字段名,或者是要判斷是否為主鍵的字段的名稱;value取值為yes或者no。如:ls_setting=dw_1.object.empid.key//判斷字段empid是否為主鍵ls_setting=dw_1.describe("empid.key")dw_1.object.empid.key="yes"http://將字段empid作為主鍵dw_1.modify("empid.key=yes")*字段名稱(name屬性)使用name屬性可以獲取字段的名稱。可以使用字段號或者字段名稱來標識一個字段,但使用字段號不太安全,所以用獲取字段名比較好一些。語法如下:直接引用:dw_1.在函數(shù)describe中:""其中,objectname是要獲取名稱的控件標識,因為在數(shù)據(jù)窗口對象中有很多控件有多種標識方法。如,下面可以獲取字段號為1的字段的名稱:dw_1.describe("#1.name")*字段中的數(shù)據(jù)保護(protect屬性)該屬性表示是否對字段中的數(shù)據(jù)進行保護,取值為0或者1。1表示實行保護,0表示不保護。當(dāng)進行數(shù)據(jù)保護時,即使字段的TabOrder值大于0用戶也不能對字段進行編輯,并且該字段都不能獲得焦點(和TabOrder取值為0時的表現(xiàn)完全相同)。下面是該屬性使用時的語法:直接弓I用:dw_1.tect在函數(shù)describe和modify中:"tect{='integer'}”其中,columnname是要獲取或者設(shè)置protect屬性的字段的標識,integer取值為0或者1。下面是使用實例:ls_setting=dw_1.object.emp_tect//獲取字段emp_start的protect屬性取值ls_setting=dw_1.describe(〃emp_tect〃)dw_1.object.emp_tect=1//設(shè)置字段emp_start的protect屬性dw_1.modify("emp_tect=1")dw_1.modify("emp_tect='1~tif(isrownew(),0,1)'”)〃設(shè)置protect屬性為表達式,含義是:如果是新數(shù)據(jù)行則將protect設(shè)置為0,否則設(shè)置為1//,缺省為1。*字段的滑動屬性(slideleft和slideup)使用字段的滑動屬性可以更好地根據(jù)運動時的情況安排數(shù)據(jù)的布局。有兩個和滑動有關(guān)的屬性,SlideLeft表示當(dāng)左面空白時是否向左滑動,SlideUp表示當(dāng)上面出現(xiàn)空白時是否向上滑動。使用該屬性的語法是:直接引用:dw_1.object.objectname.slideleftdw_1.object.objectname.slideup在函數(shù)describe和modify中:"objectname.slideleft{='value'}”"objectname.slideup{='value'}”其中,slideleft中的value取值為yes或者no。slideup中的value取值為:AllAbove:當(dāng)上面數(shù)據(jù)行中的所有對象都為空時向上滑動DirectlyAbove:當(dāng)上面和本對象對應(yīng)位置的對象為空時向上滑動No:不進行滑動下面是應(yīng)用的實例:dw_1.object.emp_lname.slideup='no'ls_setting=dw_1.describe("graph_1.slideup")dw_1.modify("emp_lname.slideup=no")*字段的TabOrder值(TabSequence屬性)字段的TabOrder值是一個比較重要的屬性,取值大于0時用戶可以編輯該字段,等于0時無法編輯該字段。在運行時,根據(jù)程序的運行情況有可能動態(tài)修改字段的TabOrder值,這時可以使用TabSequence屬性。該屬性應(yīng)用時的語法如下:直接引用:dw_1.object.columnname.TabSequence在函數(shù)modify或Describe中:"columnname.TabSequence{=number}"其中,number為從0到32000的正整數(shù),當(dāng)為0時表示字段不允許編輯。下面是使用實例:ls_setting=dw_1.object.emp_name.tabsequence〃獲取字段的TabOrder值ls_setting=dw_1.Describe("emp_name.tabsequence")dw_1.object.emp_name.tabsequence=10〃設(shè)置字段的taborder值dw_1.modify("emp_name.tabsequence=10")實際上,在編程時經(jīng)常使用函數(shù)SetTabOrder來設(shè)置或者獲取字段的TabOrder值,因為該函數(shù)正確執(zhí)行后,字段被設(shè)置成指定的TabOrder值,并且返回設(shè)置之前的TabOrder值。*用戶是否可以保存字段內(nèi)容(update屬性)當(dāng)數(shù)據(jù)窗口中的數(shù)據(jù)提交時,可以修改的字段及其對應(yīng)的數(shù)據(jù)用來產(chǎn)生updateSQL語句,使用該SQL語句進行數(shù)據(jù)的保護。所以,在程序運行時,如果不希望用戶保存某字段中的數(shù)據(jù),可以修改字段的update屬性。下面是該屬性的語法:直接弓I用:dw_1.object.columnname.update在函數(shù)modify或者describe中:"columnname.update{=value}"其中,value的取值為yes或者no。下面是使用實例:ls_setting=dw_1.object.emp_name.update//獲取字段是否可以修改ls_setting=dw_1.describe("emp_name.update")dw_1.object.emp_name.update="no"http://使字段emp_name不能修改dw_1.modify("emp_name.update=no")在應(yīng)用時,可以根據(jù)用戶的權(quán)限,或者根據(jù)用戶的錄入數(shù)據(jù)是否齊全(通常需要保證數(shù)據(jù)一致性)來動態(tài)修改某些字段的update屬性。另外,在一個數(shù)據(jù)窗口修改多個數(shù)據(jù)表時也經(jīng)常使用該屬性。*字段校驗(Validation和ValidationMsg屬性)字段的校驗規(guī)則在數(shù)據(jù)窗口畫板中可以指定,但有時需要在程序運行時動態(tài)地修改,可以使用Validation和ValidationMsg屬性來指定。屬性Validation使用時的語法如下:直接引用:dw_1.object.columnname.validation在函數(shù)describe和modify中:"columnname.validation{='validationstring'}"其中,validaionstring是一個包含校驗規(guī)則的字符串,該字符串的結(jié)果或者是True或者是False。下面是使用實例:ls_setting=dw_1.object.emp_status.validation//獲取字段的校驗規(guī)則ls_se
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 土建預(yù)算課課程設(shè)計
- 測繪實訓(xùn)課程設(shè)計
- 2024年節(jié)能環(huán)保燃油熱水爐購銷與市場拓展合同6篇
- 2024年綠色蔬菜大棚租賃合作框架協(xié)議3篇
- 消防施工課程設(shè)計
- 2024年標準墳地購置協(xié)議版B版
- 2024年版家庭贍養(yǎng)老人責(zé)任合同范本版B版
- 文章撰寫課程設(shè)計
- 2024年度交通事故損害賠償協(xié)議范本3篇
- 2024年度企業(yè)員工新媒體運營培訓(xùn)協(xié)議范本2篇
- 【MOOC】數(shù)字邏輯設(shè)計及應(yīng)用-電子科技大學(xué) 中國大學(xué)慕課MOOC答案
- 鑄牢中華民族共同體意識-形考任務(wù)3-國開(NMG)-參考資料
- 學(xué)術(shù)交流英語(學(xué)術(shù)寫作)智慧樹知到期末考試答案章節(jié)答案2024年哈爾濱工程大學(xué)
- TSEESA 010-2022 零碳園區(qū)創(chuàng)建與評價技術(shù)規(guī)范
- 無形資產(chǎn)評估習(xí)題與實訓(xùn)參考答案
- ppt模板:青團團委團課動態(tài)ppt模板課件
- 國內(nèi)異形盾構(gòu)機分析課件
- 喚醒孩子內(nèi)驅(qū)力家校共育家庭教育PPT課件(帶內(nèi)容)
- 合成氣精脫硫催化劑的研究報告
- 滾裝客船貨物的積載綁扎系固分解課件
- 市政項目吊裝施工方案
評論
0/150
提交評論