數據窗口的狀態主要有以下幾種:
1)New!
2)NewModified!
3)DataModified!
4)NotModified!
數據窗口可以利用這些狀態標志判斷數據是否被修改過。
記錄和字段的狀態標志如下:
××××××××××××××××××××
狀態 使用范圍
NotModified! 記錄與字段
DataModified! 記錄與字段
New! 記錄
NewModified! 記錄
×××××××××××××××××××××××
當第一次使用retrieve()函數從數據庫中讀取數據時,所有在數據窗口緩沖區的記錄與字段都是屬於NotModified!狀態。
當時數據被修改過后,被修改過的記錄狀態標志與字段狀態標志都會被改成DataModified!
當增加一筆數據時,增加數據的字段狀態標志為NotModified!,記錄狀態標志為New!.
當我們在增加的字段中填上數據后,字段狀態標志為DataModified!記錄狀態標志為NewModified!
二、狀態的獲取及設置
dw_1.getitemstatus(dw_1.getrow(),0,primary!)
dw_1.setitemstatus(dw_1.getrow(),0,primary!,DataModified!)
三、狀態的一些應用
1)新增數據時,不提交更新
在PB中,通常我們給用戶提供了新增的功能,這樣用戶每點擊一次,就會新增一行;而在新增的時候,根據業務需求,我們會對一些列賦值。
但是,用戶也可能是多點擊了新增按鈕,就會出現有些數據實際上是並不需要更新到數據庫的。
這個時候,就需要程序來循環刪除或者讓用戶手工刪除。
而如果,我們在觸發新增動作時,就把這條記錄的狀態更改了,改為NotModified!的話,在數據窗口提交更新的時候,就不會將這些記錄提交到數據庫了;而我們也不用再去刪除數據了。
2)數據修改時,不提交更新
有時,我們為了滿足用戶的需求,在某一列上會根據需要而顯示不同的值。雖然我們只是給用戶提供的顯示內容,實際上是並不需要更新數據庫中的內容的。但是數據窗口本身的狀態會改變,這樣在提交更新的時候,就會將這些值更新到數據庫中。
如果不考慮狀態控制的話,我們還需要根據情況,對這些數據做些處理,以還原成檢索出來的值。
如果用狀態的話,則非常簡單,只需要在觸發顯示不同值的地方,將其狀態更改為 NotModified!即可。
3)數據修改時,不覆蓋原數據,而是新增記錄
當我們修改了原數據時,又不希望覆蓋原數據,而是想要新增一條記錄,這時,我們可以把原數據的記錄狀態改為NewModified!
----
1、 getitemstatus(row,column,dwbuffer)注:如想得到整行的狀態,column參數設為0。
2、先刪除當前行,再rowcopy。
---------------------------------------------------------------
1. GetItemStatus ( long row, integer column, DWBuffer dwbuffer ) 2. dw_2.Object.Data {.buffer } {.datasource } [ startrownum,
startcolnum, endrownum, endcolnum ] = dw_1.Object.Data {.buffer } {.datasource } [ startrownum,
startcolnum, endrownum, endcolnum ] (可以一試)
---------------------------------------------------------------
補充:getitemstatus返回值為dwItemStatus枚舉類型,取值為:datamodified!,new!,newmodified!,notmodified!.
---------------------------------------------------------------
---------------------------------------------------------------
choose case dw_1.getitemstatus(1,0,primary!) case datamodified!
messagebox('','修改') case new! messagebox('','新行')
case newmodified! messagebox('','新行已修改') case notmodified!
messagebox('','什么都沒干') end choose
---------------------------------------------------------------