分享
 
 
 

DataWindow的数据缓冲区

王朝system·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有