在PB中如何控制DATAWINDOW列的修改屬性

2021-09-20 06:06:03 字數 3079 閱讀 5421

(深圳:獨孤求敗2003-05-16)

在編制管理資訊應用系統中,一般都會遇到乙個共同問題,那就是如何根據不同情況去控制表中的資料列,比如對於同一datawindow不同的使用者有不同的操作(如對於資料錄入人員可以更改資料,而對於查詢人員一般不能更改資料),下面就以乙個簡單的工資表為例來說明利用pb如何在datawindow中控制列的修改方式。

工資表基本列如下:

**姓名工作時間基礎工資浮動工資崗位工資知識分子補貼其它工資

codenameworkdatabasesamovesastationsabtothersa

在pb中有兩種方式可控制列屬性,一是靜態方式,另一種是動態方式實現。所謂靜態方式就是在列的屬性上通過選項實現。所謂動態方式就是利用程式設計實現。現分別給予介紹:

一、靜態方法

1、在datawindow中選中某列後點mouse右鍵,選「properities」後系統彈出一標籤,選中「edit」標籤,將「displayonly」選項制為有效;

2、或者選中「expression」標籤,在「protectexpress」中填入「1」;

3、或者選中「expression」標籤,在「protectexpress」中填入條件表示式,如工作時間不滿一年的人員不能修改,則寫入「if(daysafter(date(workdate),today())<=365,1,0)」;

4、在datawindow中,將某列的taborder值制為0,則該列因得不到焦點而不能被修改;

5、在datawindowpainter狀態下選取rows選單,再選取updateproperties,彈出specifyupdateproperties對話方塊,將allowupdates設為空。

二、動態修改方法

1、將整個datawindow設定為保護方式:。

語法為:dw_1.object.

datawindow.readonly=value或dw_1.modify(「datawindow.

readonly」),其中:value表示datawindow是否為唯讀(read-only)狀態,它有兩個取值:yes和no。

yes表示使datawindow為read-only;no則相反,預設值是no。例如:如果要使datawindow設定為保護方式,可以在相應事件的指令碼中包含下列**:

dw_1.modify(「datawindow.readonly=yes」)或者為:

dw_1.object.datawindow.readonly=yes

2、只保護datawindow的某些列

方法一:利用列的protect屬性

語法為:dw_或dw_1.modify(「columnname.protect」)。

引數說明:cloumnname:為要保護的列名;integer:

為該列的保護狀態,值為0或false時該列不受保護;值為1或true時該列受到保護。例如,要將列name設定為保護狀態,則相應的**為:dw_或者為:

dw_1.moidfy(「name.protect=1」)

方法二:利用列的tabsequence屬性,在程式執行時可以根據需要將該列的taborder置為0,從而達到保護的目的。

語法為:dw_或dw_1.modify(「columnname.tabsequence」)

引數說明:columnname:要保護的列名;number:該列的taborder值(0-32000)。

例如,要將列name設定為保護狀態,相應的**為:

dw_或者:dw_1.modify(「name.tabsequence=0」)

方法三:利用修改列的edit屬性中的displayonly屬性值。

語法為:dw_或dw_1.modify(「columnname.edit.displayonly」)

引數說明:columnname:要保護的列名;

value:表示該列是否為只顯示(displayonly)狀態,它有兩個取值:yes和no。yes表示不允許使用者輸入資料(只顯示):no則相反,預設值是no。

例如:如果要使列name設定為只顯示,可以在相應事件的指令碼中包含下列**:

dw_或者:dw_1.modify(「name.edit.displayonly=yes」)

用該方法時列雖不能被修改,但該列能得到焦點,上述的其它方法則不能。

三、有選擇的保護某些行

上述方法將對datawindow的所有行起作用,但要想只保護其中的某些行,則需要用列的保護(protect)屬性(取值同上述方法二),但這是在建立datawindow時實現的。方法為:在datawindow畫板(painter)中,雙擊相應的列,彈出columnobject對話方塊,選取expressions頁,在protect後的框中寫入if(條件表示式,1,0)。

靈活運用條件表示式可以獲得多種保護效果。

1、只允許修改新插入的行

在乙個datawindow中,有時會有這樣的需要:已有的資料只能瀏覽不允許修改,只有使用者新輸入的資料才允許修改,此時表示式為:

if(isrownew(),0,1),或者if(notisrownew(),1,0)

2、某一列的保護情況要根據其它列的資料進行

如在員工工資管理中,只有工作年限大於5年時才允許輸入知識分子補貼(bt),則列bt的protect後的框中輸入:if(integer(mid(string(today(),』yyyymmdd』),1,4))–integer(mid(workdata,1,4))>5,0,1)

3、要保護的行只有在執行時才能確定,並且不斷變化例如在員工工資管理中,假設工資的修改只有該工資的輸入者是變化的,且一般情況下只有在執行時才能確定條件需要乙個變數,這就需要在建立datawindow時為其指定乙個檢索資料的引數(如flag),然後在可修改列的protect後的框中輸入(user_name是該datawindow中的一列,代表輸入者的名稱):

if(user_name=flag,0,1)

在實際應用時還要注意引數的實際型別。

4、在表中增加乙個標誌列

上述方法基本上均要求要保護的行有一定的規律可循,當這些行沒有規律時,可以在相應的表中專門增加乙個標誌列(設列名為flag),取值為1和0,然後在其它列的protect後的框中直接輸入flag的表示式。執行時若該行的flag=1,在該行相應的列處於保護狀態。對於標誌列值的修改,可以由資料管理員修改或根據某種情況在程式中靈活設定。

在人際交往中如何控制自我情緒

談人際交往中的自我情緒控制 以大學生為主體分析 引言 青春是什麼?有人說青春就是再近的距離,也要跑著去。現在的我們正處於大學時期,正處於心理的成長期,既有著孩童的幼稚,又嚮往著 的成熟。而同時現在的我們正經歷著人生最美麗的階段,認識不同的人,在自己的朋友圈進行著人際交往,在和別人的相處中,我們經常會...

在工程監理中如何控制工程造價

作者 唐海洋 建築工程技術與設計 2014年第21期摘要 如今,我國的各項工程建設專案事業都在經歷著飛速的發展,並且在不同程度上迎接著機遇和挑戰。因而,就工程建設中十分重要的一環,工程造價水平的高低與否,就顯得尤為重要,而通過工程監理實現工程造價的控制顯得意義重大。因此,本文將緊緊圍繞著在工程監理中...

PLC在電梯中的控制

發布日期 2008 12 30 16 48 39 網路 電梯控制系統主要由調速部分和邏輯控制部分構成。調速部分的效能對電梯執行時乘客的舒適感有著重要 作用,目前,大多選用高效能的變頻器,利用旋轉編碼器測量曳引電機轉速,構成閉環向量控制系統。通過對變頻器引數的合理設定,不僅使電梯在執行超速和缺相等方面...