PB數據窗口中的幾種狀態及應用


數據窗口的狀態主要有以下幾種:

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
---------------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM