zoukankan      html  css  js  c++  java
  • 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
    ---------------------------------------------------------------

  • 相关阅读:
    uoj110
    11.28模拟赛D题解
    AT1219 歴史の研究
    P5906 【模板】回滚莫队&不删除莫队
    P4175 [CTSC2008]网络管理
    SP32952 ADAFTBLL
    CF1479D Odd Mineral Resource
    SP10707 COT2
    P4074 [WC2013] 糖果公园
    P6134 [JSOI2015]最小表示
  • 原文地址:https://www.cnblogs.com/claricre/p/8971178.html
Copyright © 2011-2022 走看看