1. 程式人生 > >PB資料視窗物件之欄位的修改屬性

PB資料視窗物件之欄位的修改屬性


資料視窗只能修改一個數據表。當資料視窗的資料來源於不止一個數據表時,可以用指令碼控制資料視窗的修改屬性來對資料表逐個進行修改。
當資料視窗是用來接受使用者的手工錄入資料時,應該設定兩方面的屬性才能確保資料視窗能夠用來修改資料表。一個是修改資料視窗的修改屬性,另一個是使用者可以修改的欄位的相關屬性值
----------
資料視窗物件的修改屬性
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 = '陳' andaddress = '杭州' 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:選擇唯一標識一行的列。如果在定義資料表時定義了主鍵,單擊右面的“PrimaryKey”按鈕可以在該列表框中選中主鍵。
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也不會得到焦點。使用該屬性可以保護一些重要的資料。