电脑教程中文网
首页  动态网站建设学习 程序  笑话  论坛 娱乐  交友 ADSL  峄城  成功者
中文名:电脑教程中文网,收集了大量的电脑教程! 编程技术文档 游戏开发 笑话站暂时关闭 设为首页
网页设计 HTML | Dreamweaver | CSS | Firework | FrontPage WEB开发 ASP | JSP | PHP | .NET | CGI | JS | VBS | XML | IIS6 | Apache | PWS
程序设计 Java | C++ |VC++ | C# | Delphi | VB | C语言 | 汇编 | Pascal | Perl 数据库 MSSQL | MySQL | Access | VF | Oracle | DB2 | SYBASE |
办公软件 Word | Excel | WPS | PowerPoint 动画平面 Photoshop | ACDSee | 3Dmax | Flash | Coreldraw |
操作系统 Windows 2000 | Windows XP | Windows 2003 | SCO Unix | Windows Vista | unix、Linux | 综合| 服务器 | 系统安全| 黑客技术
其  他 UltraDev | DOS | UML | PWS | Powerbuilder | 开发心得 | 设计理念 | 病毒库 | 其他 | LightTPD (分类排序给您带来不便请谅解)
推  荐: Java文档500篇》《ASP.NET与相关数据库技术高级指南》《TC图形函数详解》《C函数速查手册》《C语言编程宝典之一》《MFC深入浅出》《黑客零起点》《VC++ 编程指南》《JScript 用户指南》 《CSS教程宝典》《Microsoft Jet SQL 参考》《delphi技巧集合》《MySQL 4.1.0 中文参考手册》《MySQL中文手册
【导航】 您现在的位置 : 首页 - Powerbuilder教程 - 《Powerbuilder教程 - 基础教程》- DataWindow的数据缓冲区

DataWindow的数据缓冲区

日期:2005-9-9 17:16:41    作者:佚名   人气:   来源:网络




在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() 




网站首页 - 友情链接 - 公司简介 - 联系方式 - 广告投放 - 客户服务 - 错误报告 - 免责声明 - About us
CLDE.NET电脑教程中文网版权所有 未经许可禁止镜象和复制本站资料 MSN:CLDE_NET@hotmail.com
技术支持:CLDE.NET信息中心 鲁ICP备05039940号 友情链接QQ:784079(隐)