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

2021-08-21 22:50:07 字數 3679 閱讀 3642

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

工資表基本列如下:

**

姓名

工作時間

基礎工資

浮動工資

崗位工資

知識分子補貼

其它工資

code

name

workdata

basesa

movesa

stationsa

bt

othersa

char

varchar

char

decimal

decimal

decimal

decimal

deciaml

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

一、靜態方法 

(1)在datawindow中選中某列後點mouse右鍵,選"properities"後系統彈出一標籤,選中"edit"標籤,將"display only"選項制為有較;

(2)或者選中"expression"標籤,在"protect express"中填入"1";

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

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

(5)在datawindow painter 狀態下選取rows選單,再選取update properties,彈出specify update properties對話方塊,將allow updates 設為空。

二、動態修改方法

(1)將整個datawindow設定為保護方式:利用datawindow object的readonly屬性可以將整個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_1.object.name.protect=integer 或 dw_1.modify("columnname.protect")。

引數說明:cloumnname:為要保護的列名;integer:為該列的保護狀態,值為0或false時該列不受保護;值為1或true時該列受到保護。例如,要將列name設定為保護狀態,則相應的**為:dw_1.object.name.protect=1 或者為:

dw_1.moidfy("name.protect=1")

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

dw_1.object.name.tabsequence= number

或dw_1.modify("columnname.tabsequence")

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

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

dw_1.object.name.tabsequence=0

或者:dw_1.modify("name.tabsequence=0")

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

語法為:

dw_1.object.columnname.edit.displayonly=value

或 dw_1.modify("columnname.edit.displayonly")

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

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

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

dw_1.object.name.edit.displayonly=yes

或者:dw_1.modify("name.edit.displayonly=yes")

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

三、有選擇的保護某些行

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

(1)只允許修改新插入的行

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

if(isrownew(),0,1),或者if(not isrownew(),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,在該行相應的列處於保護狀態。對於標誌列值的修改,可以由資料管理員修改或根據某種情況在程式中靈活設定。

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

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

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

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

在PB中利用DDE

powerbuilder 以下稱pb 是一種強有力的企業級資料庫應用系統開發工具,利用它可以方便地開發出資料庫系統的前台應用軟體。但由於用pb所開發的報表具有一定的侷限性 報表的表頭 列寬等都不能在應用程式中由使用者來進行調整,所以若使用者報表的格式有所變動,則必須在原程式中對報表進行調整,這在很大...