DataWindow的数据缓冲区

原创 2001年07月06日 11:22:00

DataWindow的数据缓冲区


张健姿
01-6-22 下午 03:14:44


DATAWINDOW的四个缓站区
在PowerBuilder中,DataWindow是用户前端用来存储、操纵数据的对象。在每一个DataWindow对象中有4个二维表作为数据缓冲区,用来存储查询到的数据。用户在DataWindow中对数据处理系统内部的操作实际上都是将数据在这几个缓冲区中进行的修改和移动,最后在用户提交数据库时,系统根据这四个缓冲区中的信息形成SQL的IN-SERT,UPDATE,DELETE等语句。这四个缓冲区是:
Primary Buffer
这个缓冲区是存放填充窗口中DataWindow控件中数据的,调用DataWindow的Retrieve()函数和InsertRow()函数可以将数据填入这个缓冲区中。当使用有关DataWindow删除和过滤函数时,相应记录将从这一缓冲区中删除。而在执行DataWindow的Update()函数时,PowerBuilder将查看这一缓冲区中的记录,以形成SQL INSERT和UPDATE语句。
Delete Buffer
这个缓冲区保存的是用DeleteRow()函数从Primary Buffer中删除的记录,执行Update()函数时,系统根据这一缓冲区的记录形成DELETE语句。
Filter Buffer
这个缓冲区存储的是从Original Buffer使用Filter()函数过滤到Primary Buffer中后剩余的记录。
Original Buffer
这一缓冲区存储的是DataWindow最初执行retrieve()函数时得到的全部记录。当提交数据库时,根据Primary Buffer生成的UPDATE语句和根据Delete Buffer生成的DELETE语句都要依据这一缓冲区来构造这些SQL语句中的Where子句。
Original Buffer由PowerBuilder内部维护,Power-Builder所提供的任何函数都无法改变它的值,不过通过PowerBuilder所提供的GetItem…系列的函数可以读出DataWindow最初从数据库中查到的原始值。通过这些函数我们可以编程实现所谓的"Undo"功能,并且得到在使用乐观锁时形成提交数据库的WHERE子句。
如果您当前使用的DataWindow没有设置修改的权力,您将不能对Delete缓冲区和Original缓冲进行操作,而且当调用Update()时也将引起系统错误。
数据缓冲区的状态值
Primary Buffer和Delete Buffer都有行级和列级的状态值,这个状态值是一个枚举类型。在提交时由该行的状态值来决定是否要产生SQL语句,其中Primary Buffer产生的是IN-SERT和UPDATE语句,而Delete Buffer产生的是DELETE语句。我们用GetItemStatus()函数和SetItemStatus()函数可以对这一状态值作操纵。这一枚举状态有以下四种:
·NotModified!———该行或行的值为查询所得,没有发生改变。
·DataModified!———该行或列的值为查询所得,发生了改变。
·New!———该行或列为一插入的新行,数据没有发生改变(数据为空或缺省值)。
·NewModified!———该行或列为一插入的新行,数据发生改变。改变是通过用户键盘输入或调用了SetItem()函数。
让我们来看下面这一实例:
我们有这样一张表,表中有三个字段,其中ITEM是主键。
ITEM CHAR(5);
NAME CHAR(20);
QUANTITY INT。
在Script中我们查询这张表的记录,得到以下这些信息存储了在Primary和Origianal Buffer中,其中的行号是缓冲区加上的。!TB 01175000.gif
在窗口中,我们编程过滤掉数量为0的行,并且加上一个空行:
dw_1.SetFilter("quantity=0")
dw_1.Filter()
dw_1.InsertRow()
这时Primary Buffer的状态为:!TB 01175001.gif
在Filter Buffer中的记录为:!TB 01175002.gif
用户在新插入行中输入数据,删除了第3行数据,并修改了第2行数据。当他离开这个DataWindow时,Primary和Delete缓冲区的状态如下:!TB 01175003.gif
这时执行dw_1.update()函数,系统将基于这两个缓冲区生成SQL语句。!TB 01175004.gif
在Primary Buffer中,状态为NotModified和New!的行将被忽略而不产生SQL语句。状态为DataModified的行将产生UPDATE语句,状态为NewModified的行将产生INSERT语句,在Delete缓冲区中的行将产生DELETE语句。
四个缓冲区在编程中的运用
某些DataWindow控件的函数有指定DataWindow缓冲区的功能。如果缺省,则表示Primary缓冲区。下列是可以指定缓冲区的函数:
·GetItemStatus()
·GetNextModified()
·GetUpdateStatus()
·SetItemStatus()
此外还有GetItem…系列的函数,用以查询DataWindow中的值。这些函数有:
·GetItemDate()
·GetItemDataTime()
·GetItemDecimal()
·GetItemNumber()
·GetItemString()
·GetItemTime()

浅议PB中数据窗口缓冲区与数据修改状态,filter,delete之后不想修改之方法

PB,pb缓冲区,filter detete之后不更新update,PB-数据窗口缓冲区与数据修改状态
  • luoxiya521
  • luoxiya521
  • 2014年12月14日 21:34
  • 2169

PB-数据窗口缓冲区与数据修改状态

PB-数据窗口缓冲区与数据修改状态   1--缓冲区的介绍   在应用程序运行时,用户对数据窗口进行的操作情况是很复杂的,删除、插入、修改等操作有可能都会发生。记录哪些数据修改过、哪些数据需要...
  • tlammon
  • tlammon
  • 2016年03月01日 15:55
  • 3055

PB判断数据窗口数据是否更改及原始值与当前值

PB判断数据窗口数据是否更改及原始值与当前值    dwcontrol.GetItemStatus ( row, column, Primary! )可以获取该缓冲区内指定单元的状态,当参数colu...
  • nuptsv_ice
  • nuptsv_ice
  • 2014年03月07日 09:19
  • 5951

DataWindow的数据缓冲区

DataWindow的数据缓冲区 (加入日期:2002-2-2) 【保存文章至硬盘】【打印文章】【字体:大中 小】 分享到: 0 在PowerBuilder中,DataWindow是...
  • hunter403
  • hunter403
  • 2012年04月05日 16:18
  • 227

Oracle 数据缓冲区调优精选

  • 2013年06月23日 22:24
  • 231KB
  • 下载

自动扩展分配的数据缓冲区

//  由于TCP是不分界限的字节流数据,一般在从socket 内核缓冲区读数据时根本不知道缓冲区里有多少数据。 //  可以通过recv 的MSG_PEEK 标致位窥看数据的长度, 再动态分配存储...
  • maypeter2008
  • maypeter2008
  • 2016年06月25日 15:13
  • 180

架构高性能网站秘笈(六)——构建数据缓冲区

到此为止,一共介绍了四种服务器性能优化的方法,分别是:动态内容缓存、浏览器缓存、反向代理缓存、Web组件分离。我们发现在这四种方法中,“缓存”占了大头!确实如此,“缓存”是服务器性能优化的核心思想,我...
  • xingxing513234072
  • xingxing513234072
  • 2016年04月12日 13:46
  • 278

自我管理数据缓冲区内存

自我管理数据缓冲区内存 开发具有高效性、简单性、可移植性和安全性的代码 Xiaoming Zhang (zhang@uk.ibm.com), 高级软件工程师, IBM 英国实验...
  • qihuaheng
  • qihuaheng
  • 2011年09月07日 01:12
  • 1024

stm32 usb数据缓冲区疑问

USB不同的应用需要使用到的端点数和端点数据长度各不相同,如果为每个端点都单独规划一个存储区非常浪费。 所以STM32为USB模块提供了共512个字节的存储区,至于如何为每个端点分配使用这512...
  • u011318735
  • u011318735
  • 2013年12月21日 07:40
  • 1140

架构高性能网站秘笈(六)——构建数据缓冲区

到此为止,一共介绍了四种服务器性能优化的方法,分别是:动态内容缓存、浏览器缓存、反向代理缓存、Web组件分离。我们发现在这四种方法中,“缓存”占了大头!确实如此,“缓存”是服务器性能优化的核心思想,我...
  • u010425776
  • u010425776
  • 2016年04月11日 11:35
  • 1801
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DataWindow的数据缓冲区
举报原因:
原因补充:

(最多只允许输入30个字)