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
---------------------------------------------------------------
PB数据窗口中的几种状态及应用的更多相关文章
- pb数据窗口设置操作
1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Pro ...
- java对象中的三种状态和脏检查及刷新缓存机制
瞬时状态 瞬时状态又称临时状态.如果java对象与数据库中的数据没有任何的关联,即此java对象在数据库中没有相关联的记录,此时java对象的状态为瞬时状态,session对于 瞬时状态的ava对象是 ...
- Egret 中实现3种状态切换按钮
一.游戏中的常用3种状态按钮 Egret种提供了2种状态切换的按钮ToggleButton. 但是在游戏中常用到3种状态的按钮,比如任务系统的领取.已领取.未领取. 比如下图中宝箱的打开.浏览后打开. ...
- powerbulider9.0在数据窗口中实现滚动到新添加行
powerbuilder9.0对数据窗口进行增加行操作,然后实现滚动到指定行时,应先滚动到指定行dw_1.scrolltorow( row),然后设置新添加的行为当前行dw_1.setrow( row ...
- WPF中CheckBox三种状态打勾打叉和滑动效果
本文分为两个demo, 第一个demo实现checkBox的打叉或打勾的效果: 第二个demo部分实现checkBox的滑动效果. Demo1: wpf的CheckBox支持三种状态,但是美中不足的是 ...
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的三种状态
以下属于不明来源资料: 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根 ...
- 使用flask框架实现web页面与数据库数据互联+常见的几种状态码
1.通过cygwin从pip install两个包:PyMySQL.SQLAlchemy: 2.在app.py中import我们要用到的库中的包:create_engine,text :from sq ...
- pb数据窗口之间的传参
问题描述: 通过一个窗口打开一个子窗口并传递指定参数查询详细信息 解决方法: 在前者窗体的user object下的itemchanged事件中,相应位置加入openwithparm函数 : op ...
- ASP.Net中的四种状态保持机制
每个人上网可多有过这样的情况,当我们登陆某个网站时,在登陆的旁边会有一个 "记住我" 的复选框,有的网站还会让用户选择记住我.这个记住我是怎么实现的呢? 其实就用利用的是cooki ...
随机推荐
- Java删除文件或目录及目录下所有文件
一直在做C++相关开发的工作.突然某一天一时兴起,想学习下Java开发.然后再网上找到一本Java简明教程,入门是够用了.看到文件IO这一章,想起之前用C++做的删除文件或目录的练习,于是打算用Jav ...
- CBCGPImage的GetSize的问题及解决方法
BCGControlBar Pro for MFC 25.10是目前(2018-07-16)网上能够找到的最新能够使用的版本,我配合Visual Studio 2010使用.在单文档MFC程序的视图中 ...
- Python学习之购物车
实现功能: 程序启动,提示用户输入用户名和密码,程序读取余额文件last_salary.txt内容(文件不存在则自动创建),若文件内容为空则提示“首次登录,请输入工资”: 用户可以输入商品编号进行购买 ...
- HTML语义化的重要性
语义化标签就是尽量使用有相对应的结构的含义的Html的标签 1.结构更好,更利于搜索引擎的抓取(SEO的优化)和开发人员的维护(可维护性更高,因为结构清晰,so易于阅读). 2.更有利于特殊终端的阅读 ...
- yarn 无法下载node-sass
指定node-sass的下载源 yarn config set sass-binary-site http://npm.taobao.org/mirrors/node-sass
- ajax状态值和状态码
AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤.如:正在发送,正在响应等,由AJAX对象与服务器交互时所得:使用“ajax.ready ...
- table选项卡
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- decltype和新的返回值语法
新的返回值语法 让我们讲一下新的返回值语法,这个语法还能看到auto的另一个用处.在以前版本的C和C++中,返回值的类型必须写在函数的前面: int multiply(int x, int y) 在C ...
- linux 共享内存
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输.这种高效带来的问题是,我们必须用其他手段来同步进程对共享内存的访问,否则会产生竞态条件.所以,共享内存通常和其他进程间通信方式一起使用 ...
- 顺序链表的C风格实现
//头文件 #ifndef _SEQLIST_H_ #define _SEQLIST_H_ //定义数据类型 typedef void SeqList; typedef void SeqListNod ...