数据窗口的状态主要有以下几种:

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

PB数据窗口中的几种状态及应用的更多相关文章

  1. pb数据窗口设置操作

    1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Pro ...

  2. java对象中的三种状态和脏检查及刷新缓存机制

    瞬时状态 瞬时状态又称临时状态.如果java对象与数据库中的数据没有任何的关联,即此java对象在数据库中没有相关联的记录,此时java对象的状态为瞬时状态,session对于 瞬时状态的ava对象是 ...

  3. Egret 中实现3种状态切换按钮

    一.游戏中的常用3种状态按钮 Egret种提供了2种状态切换的按钮ToggleButton. 但是在游戏中常用到3种状态的按钮,比如任务系统的领取.已领取.未领取. 比如下图中宝箱的打开.浏览后打开. ...

  4. powerbulider9.0在数据窗口中实现滚动到新添加行

    powerbuilder9.0对数据窗口进行增加行操作,然后实现滚动到指定行时,应先滚动到指定行dw_1.scrolltorow( row),然后设置新添加的行为当前行dw_1.setrow( row ...

  5. WPF中CheckBox三种状态打勾打叉和滑动效果

    本文分为两个demo, 第一个demo实现checkBox的打叉或打勾的效果: 第二个demo部分实现checkBox的滑动效果. Demo1: wpf的CheckBox支持三种状态,但是美中不足的是 ...

  6. 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的三种状态

    以下属于不明来源资料: 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根 ...

  7. 使用flask框架实现web页面与数据库数据互联+常见的几种状态码

    1.通过cygwin从pip install两个包:PyMySQL.SQLAlchemy: 2.在app.py中import我们要用到的库中的包:create_engine,text :from sq ...

  8. pb数据窗口之间的传参

    问题描述: 通过一个窗口打开一个子窗口并传递指定参数查询详细信息 解决方法: 在前者窗体的user object下的itemchanged事件中,相应位置加入openwithparm函数 :   op ...

  9. ASP.Net中的四种状态保持机制

    每个人上网可多有过这样的情况,当我们登陆某个网站时,在登陆的旁边会有一个 "记住我" 的复选框,有的网站还会让用户选择记住我.这个记住我是怎么实现的呢? 其实就用利用的是cooki ...

随机推荐

  1. jQuery对表单、表格的操作以及更多应用

    表单和表格都是HTML的重要组成部分,分别用于采集.提交用户输入的信息和显示列表数据. 表单应用:一个表单有3个基本组成部分: ①表单标签:包含处理表单数据所用的服务器端程序URL以及数据提交到服务器 ...

  2. python 多进程,多线程,协程

    在我们实际编码中,会遇到一些并行的任务,因为单个任务无法最大限度的使用计算机资源.使用并行任务,可以提高代码效率,最大限度的发挥计算机的性能.python实现并行任务可以有多进程,多线程,协程等方式. ...

  3. Spring Cloud 升级最新 Finchley 版本,踩坑指南!

    https://blog.csdn.net/youanyyou/article/details/81530240 Spring Cloud 升级最新 Finchley 版本,踩了所有的坑! 2018年 ...

  4. 爬虫学习(十五)——json解析

    json与jsonpath 对象{}:jsonobject 对象:对象在js中表现为{}括起来的内容,数据结构为{key:value,key:value...}键值对的结构,在面向对象的结构中,key ...

  5. spring boot+log4j2快速使用(一)

    log4j是Apache的一个开源项目,log4j2和log4j是一个作者,只不过log4j2是重新架构的一款日志组件,他抛弃了之前log4j的不足,以及吸取了优秀的logback的设计重新推出的一款 ...

  6. 46个Linux面试常见问题

    问题一: 绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 答案:绝对路径: 如/etc/init.d当前目录和上层目录: ./  ../主目录: ~/切 ...

  7. ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)

    pragma solidity ^0.4.4; contract funder{ //0xca35b7d915458ef540ade6068dfe2f44e8fa733c //0x14723a09ac ...

  8. Java基础——对象和类

    将包含main方法的类称为主类. 变量的作用域是指变量可以在程序中引用的范围. 实例变量和静态变量的作用域是整个类,无论变量是在哪里声明的. 局部变量的声明和使用都在一个方法的内部. 一个类的实例变量 ...

  9. python文件操作练习之文件备份

    文件备份 ## 文件备份 # 打开文件 def backup(file1, file2): with open(file1, 'rb') as f1,\ open(file2, 'wb') as f2 ...

  10. 笔记-redis深入学习-1

    笔记-redis深入学习-1 redis的基本使用已经会了,但存储和读取只是数据库系统最基础的功能: 数据库系统还得为可靠实现这两者提供一系列保证: 数据.操作备份和恢复,主要是持久化: 高可用:主要 ...