在PowerBuilder中,DataWindow是用户前端用来存储、操纵数据的对象。在每一个DataWindow对象中有4个二维表作为数据缓冲区,用来存储查询到的数据。用户在DataWindow中对数据处理系统内部的操作实际上都是将数据在这几个缓冲区中进行的修改和移动,最后在用户提交数据库时,系统根据这四个缓冲区中的信息形成SQL的IN-SERT,UPDATE,DELETE等语句。这四个缓冲区是:
PrimaryBuffer
这个缓冲区是存放填充窗口中DataWindow控件中数据的,调用DataWindow的Retrieve()函数和InsertRow()函数可以将数据填入这个缓冲区中。当使用有关DataWindow删除和过滤函数时,相应记录将从这一缓冲区中删除。而在执行DataWindow的Update()函数时,PowerBuilder将查看这一缓冲区中的记录,以形成SQLINSERT和UPDATE语句。
DeleteBuffer
这个缓冲区保存的是用DeleteRow()函数从PrimaryBuffer中删除的记录,执行Update()函数时,系统根据这一缓冲区的记录形成DELETE语句。
FilterBuffer
这个缓冲区存储的是从OriginalBuffer使用Filter()函数过滤到PrimaryBuffer中后剩余的记录。
OriginalBuffer
这一缓冲区存储的是DataWindow最初执行retrieve()函数时得到的全部记录。当提交数据库时,根据PrimaryBuffer生成的UPDATE语句和根据DeleteBuffer生成的DELETE语句都要依据这一缓冲区来构造这些SQL语句中的Where子句。
OriginalBuffer由PowerBuilder内部维护,Power-Builder所提供的任何函数都无法改变它的值,不过通过PowerBuilder所提供的GetItem…系列的函数可以读出DataWindow最初从数据库中查到的原始值。通过这些函数我们可以编程实现所谓的"Undo"功能,并且得到在使用乐观锁时形成提交数据库的WHERE子句。
如果您当前使用的DataWindow没有设置修改的权力,您将不能对Delete缓冲区和Original缓冲进行操作,而且当调用Update()时也将引起系统错误。
数据缓冲区的状态值
PrimaryBuffer和DeleteBuffer都有行级和列级的状态值,这个状态值是一个枚举类型。在提交时由该行的状态值来决定是否要产生SQL语句,其中PrimaryBuffer产生的是INSERT和UPDATE语句,而DeleteBuffer产生的是DELETE语句。我们用GetItemStatus()函数和SetItemStatus()函数可以对这一状态值作操纵。这一枚举状态有以下四种:
·NotModified!———该行或行的值为查询所得,没有发生改变。
·DataModified!———该行或列的值为查询所得,发生了改变。
·New!———该行或列为一插入的新行,数据没有发生改变(数据为空或缺省值)。
·NewModified!———该行或列为一插入的新行,数据发生改变。改变是通过用户键盘输入或调用了SetItem()函数。
让我们来看下面这一实例:
我们有这样一张表,表中有三个字段,其中ITEM是主键。
ITEMCHAR(5);
NAMECHAR(20);
QUANTITYINT。
在Script中我们查询这张表的记录,得到以下这些信息存储了在Primary和OrigianalBuffer中,其中的行号是缓冲区加上的。!TB01175000.gif
在窗口中,我们编程过滤掉数量为0的行,并且加上一个空行:
dw_1.SetFilter("quantity=0")
dw_1.Filter()
dw_1.InsertRow()
这时PrimaryBuffer的状态为:!TB01175001.gif
在FilterBuffer中的记录为:!TB01175002.gif
用户在新插入行中输入数据,删除了第3行数据,并修改了第2行数据。当他离开这个DataWindow时,Primary和Delete缓冲区的状态如下:!TB01175003.gif
这时执行dw_1.update()函数,系统将基于这两个缓冲区生成SQL语句。!TB01175004.gif
在PrimaryBuffer中,状态为NotModified和New!的行将被忽略而不产生SQL语句。状态为DataModified的行将产生UPDATE语句,状态为NewModified的行将产生INSERT语句,在Delete缓冲区中的行将产生DELETE语句。
四个缓冲区在编程中的运用
某些DataWindow控件的函数有指定DataWindow缓冲区的功能。如果缺省,则表示Primary缓冲区。下列是可以指定缓冲区的函数:
·GetItemStatus()
·GetNextModified()
·GetUpdateStatus()
·SetItemStatus()
此外还有GetItem…系列的函数,用以查询DataWindow中的值。这些函数有:
·GetItemDate()
·GetItemDataTime()
·GetItemDecimal()
·GetItemNumber()
·GetItemString()
·GetItemTime()
分享到:
相关推荐
DataWindow的数据缓冲机制包括三个主要缓冲区:主记录缓冲区(Primary)、删除记录缓冲区(Deleted)和过滤记录缓冲区(Filter)。主记录缓冲区存储初始从数据库获取的数据,删除缓冲区保存被标记为删除的记录,而过滤缓冲...
介绍PowerBuild数据窗口几个缓冲区含义及区别,及相关方法简介。初学者可以参考。
pb中DataWindow的数据缓冲区 在PowerBuilder 中,DataWindow 是 用 户 前 端 用 来 存 储、 操 纵 数 据 的 对 象。 在每 一 个Data Window 对 象 中 有4 个 二 维 表 作 为 数 据 缓 冲 区, 用来 存 储 查 询 到 的 ...
本文将围绕“PB资料网站(pb12下载,pb12资源)”这一主题,深入探讨PowerBuilder 12的相关知识点,包括资源下载、关键技术专栏以及DataWindow数据缓冲区的概念。 #### PowerBuilder 12资源下载与资料获取 Power...
此外,PowerBuilder 还提供了函数 RowsCopy 和 RowsMove,可以在不同 DataWindow 控件(或 DataStore 对象)之间或同一 DataWindow 控件(或 DataStore 对象)的不同缓冲区之间复制、移动数据行。 PowerBuilder 中...
DataWindow.NET Control中的数据缓冲区类似于PowerBuilder中的数据窗口,用于存储和管理数据。每个WebFormDataWindowControl对象中包含了四个二维表作为数据缓冲区,分别是主缓冲区、删除缓冲区、过滤缓冲区和原始...
DataWindow Buffer,顾名思义,就像是一个内存中的数据缓冲区,用于存储和管理从数据库中检索到的数据。每当我们在PowerBuilder中执行SQL查询时,查询结果会被加载到DataWindow Buffer中。这个Buffer不仅是数据的...
为了高效地处理数据,数据窗口在客户端内存中使用多个缓冲区来存储数据的不同状态,主要包括: - **主缓冲区**:用于存放从数据库加载的数据以及用户修改后的数据。 - **删除缓冲区**:记录已经被用户标记为删除的...
数据窗口在使用时会在客户机的本地内存中开辟四个缓冲区:主缓冲区、删除缓冲区、过滤缓冲区和原始缓冲区。这些缓冲区协作完成数据的增加、删除、修改,并最终将处理结果提交给数据库管理系统。 编辑控件,又称为...
8. **性能优化**:通过预定义的数据缓冲区和智能查询技术,提高数据检索和显示的速度。 使用PowerBuilder的DataWindow,开发者能够轻松实现复杂的业务逻辑,同时保持代码的简洁和可维护性。在实际应用中,数据窗口...
这个事件是处理用户交互的关键,因为它意味着用户的选择已经完成并且新的值已经存储在了相应的缓冲区中。 2. **使用Describe()方法**:接下来,我们需要使用`Describe()`方法来获取具体的值。`Describe()`方法可以...
也说明了 数据窗口 中的数据,是如何在 4 个缓冲区中流动的 PB 虽老,但他的 数据窗口 还有技术专利,确实操作很快捷方便, 现在还没有能比得上 PB 的数据窗口 操作更快捷的 将此图分享给学 PB 的同
数据窗口章节深入探讨了数据窗口的常见问题、函数事件、缓冲区管理、状态位、并发控制以及数据拷贝等。数据窗口是PB的核心组件,它允许开发者创建、显示和操作数据库中的数据。常见的问题包括如何处理数据输入、错误...
在处理大量数据时,可以使用数据窗口的缓冲区(CacheSize)和分页(FetchMode)属性来优化性能。通过设置合适的缓冲区大小,可以减少对数据库的访问次数;而分页则可以降低内存占用,提高响应速度。 8. 高级特性 ...
11. **数据缓冲区**: - 数据窗口编辑时,数据存于悬浮窗,变化只有在焦点转移或调用`accepttext()`后才反映到主缓冲区。 12. **消息对象**: - `message`对象用于接收窗口参数,`powerobjectparm`属性用于传递...
* 第七讲: 利用SetActionCode函数控制DataWindow * 第八讲: 分布式PowerBuilder设计 * 第九讲: DataWindow的数据缓冲区 * 第十讲: 用DataWindow实现对多表的修改 * 第十一讲:游标的使用 * ...
在数据更新之前,需要调用Retrieve()函数确保数据窗口中的数据被正确地存入缓冲区。 当遇到格式不一致的情况时,需要创建两个数据窗口:一个连接到外部数据文件,另一个连接到内部数据库。数据先被读入第一个数据...
在这个事件中,你可以使用GDI(Graphics Device Interface)函数直接绘制到DataWindow的打印缓冲区,实现诸如分页、水印、页眉页脚等高级特性。 6. **使用Print Setup对话框**: - `DisplaySetup()`函数:此函数...