`
zjut_xiongfeng
  • 浏览: 283219 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

DataWindow Buffers

阅读更多

 

 

Original

 

Primary

 

Deleted

 

Filtered

为datawindow的缓冲区,具体介绍见附件。

DataWindow的数据缓冲区

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()
GetItem…系列函数也可以指定缓冲区,而且可以允许您指定查询的是当前值还是原始值(最初从数据库中查到的值)。如:
dw_1.GetItemString(1,"name",Primary!,TRUE)
使用DataWindow的Reset()函数和Retrieve()函数以及改变DataObject属性时,系统将重置这几个缓冲区。
当用户插入一个新行时,编程者往往要自动在新插入行中的某些列中插入一些缺省的数据值。这时,用户并没有对数据作任何修改。可是在用户要关闭这一窗口时,如果在CloseQuery事件中用ModifiedCount()函数查看数据是否修改,得到的结果显然是有所改变。用户将得到一个提示信息框:"是否打算保存所作的修改?是/否/取消"———这显然是不适合的:而且如果用户选择的是保存时,这些原应是空记录的行也成为了有内容的行,系统将其形成SQL的INSERT语句提交数据库,这样的结果更为恶劣。为改变这一状况,我们可以用SetItemStatus()函数将该行的状态改为New!。即当有新行插入并且设置了缺省值之后,该行的状态值为New!。下面的程序就可以得到如上的功能。
∥Insert a new row in dw_1
long 1_Row
1_Row=dw_1,InsertRow(dw_1,GetRow())
dw_1,SetItem(1_Row,"discount_pct",0,10)
∥Set th row status to New! so that the CloseQuery check will only detect user entries.
dw_1.SetItemStatus(1_Row,0,Primary!,New!)
使用SetItemStatus函数时有一些状态转换的限制,下表中显示的是将原来的状态改变为另一状态时,会产生的影响。若表中为No,则说明用这一函数进行这样的设置无效;若表中给出了不同的状态,则该状态是对您指定的状态的替代。
当一个状态的改变不能允许时,可以多次调用SetItemStatus以得到期望的状态。例如,从New!状态不能改成NotModified!状态,可将其改成DataModified!状态,然后再改成NotModified!状态。
分享到:
评论

相关推荐

    DataWindow .NET 2.5 完美破解补丁

    DataWindow .NET 2.5 是 PowerBuilder 中的一个核心组件,它是 Sybase(现已被 SAP 收购)开发的一种用于构建数据库应用的图形化控件。这个“完美破解补丁”似乎提供了对 DataWindow .NET 2.5 的未授权访问,允许在 ...

    powerbuilder中DATAWINDOW使用技巧

    ### PowerBuilder中DataWindow使用技巧详解 #### 一、PowerBuilder与DataWindow简介 PowerBuilder是一种集成开发环境(IDE),广泛应用于快速应用开发(RAD)。它由PowerSoft公司开发,并在1991年首次发布,后被SAP...

    PB-Datawindow函数大全

    ### DataWindow 控件详解与技巧应用 #### 一、使DataWindow列只能追加不能修改 在使用DataWindow时,有时我们需要确保用户只能追加新记录而不能修改现有记录。这可以通过设置`Protect`属性来实现。对于每一列,...

    datawindow.net 2.5

    数据窗口(DataWindow)是PowerBuilder中的一个核心组件,它是一种强大的报表和数据展示工具。在.NET环境中,数据窗口的概念被扩展到了DataWindow.NET,这是一个专门用于.NET Framework的应用程序开发的控件。...

    Datawindow 导出到PDF文件

    在IT行业中,DataWindow是一种由PowerBuilder开发工具提供的数据展示组件,它允许程序员设计和创建交互式的报告和表格。PDF(Portable Document Format)文件格式则是一种广泛应用的文档格式,能够跨平台保持一致的...

    pb 导入excle 到datawindow

    在IT行业中,PowerBuilder是一款强大的可视化开发工具,尤其在数据窗口(DataWindow)的设计和管理上表现出色。本文将深入探讨如何使用PowerBuilder将Excel数据导入到DataWindow中,这是一项常见的数据迁移任务,...

    PB datawindow保存为bmp

    在PowerBuilder (PB) 开发环境中,DataWindow 是一个强大的数据展示和操作工具,它可以将数据库中的数据以各种形式(如表格、图表等)显示出来。在标题“PB datawindow保存为bmp”中,提到的问题是关于如何在Power...

    datawindow.rar

    《DataWindow技术详解》 DataWindow是PowerBuilder中的核心组件之一,它是一种强大的报表和数据展示工具,能够灵活地处理数据库中的数据,并将其以各种形式展现出来,如表格、图表、文本等。在本篇文章中,我们将...

    pb9 datawindow treeview 树型结构

    在PowerBuilder 9 (PB9) 中,DataWindow控件是一个强大的数据展示工具,它可以用于显示和操作数据库中的数据。在本案例中,我们将探讨如何使用DataWindow来实现一个treeview,即树型结构,这对于组织层次化数据非常...

    pb中用DataWindow实现对多表的修改.doc

    pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb...

    在PB中如何控制DATAWINDOW列的修改属性

    在 PB 中控制 DATAWINDOW 列的修改属性 在编制管理信息应用系统中,如何控制 DATAWINDOW 列的修改属性是一个共同问题。下面将以一个简单的工资表为例,说明利用 PB 中如何控制 DATAWINDOW 列的修改属性。 一、静态...

    DataWindow数据窗口资料

    《DataWindow数据窗口详解》 在信息技术领域,DataWindow是一种常用的数据展示工具,尤其在PowerBuilder编程环境中,它扮演着核心角色。DataWindow是Sybase公司的PowerBuilder开发平台中的一个独特功能,允许开发者...

    pb中xml导入datawindow源码

    在PB中,DataWindow是核心组件之一,用于处理数据库数据。DataWindow不仅可以展示数据,还能进行数据检索、编辑和更新。XML(eXtensible Markup Language)是一种用于存储和传输数据的通用格式,它具有良好的结构化...

    PowerBuilder DataWindow的数据更新技术及应用.doc

    PowerBuilder DataWindow 是一个强大的数据库交互组件,它在PowerBuilder应用程序中扮演着核心角色。DataWindow的数据更新技术主要依赖于其内置的数据缓冲机制,这使得开发者能够在不立即提交到数据库的情况下对数据...

    DATAWINDOW技术参考手册

    ### DATAWINDOW技术参考手册知识点详解 #### 一、DataWindow组件概述 在《DATAWINDOW技术参考手册》中,首先介绍了DataWindow组件的基本概念及其在PowerBuilder中的应用价值。DataWindow是一种高级的数据展示与...

    PB Datawindow 导出 pdf 文件方法.rar

    DataWindow 是 PowerBuilder 的核心组件,用于展示和操作数据库中的数据。在 PB 应用程序中,DataWindow 不仅可以显示数据,还支持多种输出格式,包括 PDF。本教程将详细解释如何利用 PowerBuilder 的 DataWindow ...

    The Definitive DataWindow 2

    本书《The Definitive DataWindow 2》是由Rik Brooks撰写,是关于PowerBuilder和DataWindow使用的权威指南。Rik Brooks在1999年写作本书,并于2000年首次出版。本书第二版在原有基础上进行了更新,删除了已经过时的...

    PB datawindow中的极品(可设计网络top图)

    PowerBuilder (PB) 是一种流行的开发工具,尤其在企业级应用开发中被广泛使用,它提供了数据窗口 (DataWindow) 这一强大的组件来处理数据展示和操作。在这个主题中,“PB datawindow中的极品(可设计网络top图)”...

Global site tag (gtag.js) - Google Analytics