浅议PB中数据窗口缓冲区与数据修改状态_第1页
浅议PB中数据窗口缓冲区与数据修改状态_第2页
浅议PB中数据窗口缓冲区与数据修改状态_第3页
浅议PB中数据窗口缓冲区与数据修改状态_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、浅议PB中数据窗口缓冲区与数据修改状态摘 要:文章描述了 PowerBuilder中数据窗口缓冲区,详细介绍了数据窗口中 行与列的修改状态以及PowerBuilder提供的相关函数,并给出了几则应用实例。 关键词:PowerBuilder 数据窗口 缓冲区中图分类号:TP311.131文献标识码:APowerBuilder是当今最先进的数据库开发工具之一,它以开放性、可移植性以及易用 性而闻名于世。PowerBuilder的突出特点是给应用开发人员提供了非常方便的开发环境和 工具,而数据窗口技术则是其中最耀眼的闪光点。利用数据窗口,开发人员可以完成绝大多 数数据操作任务。本文从数据窗口中数据的

2、修改状态的角度出发,介绍利用数据窗口进行应 用开发的一些技巧。1数据窗口缓冲区在应用中,每个数据窗口控件都要检索4个内存缓冲区,它们是:主缓冲区(PrimaryBuffer):存放检索出来的数据,但不包括过滤掉和删除掉的数据。过滤缓冲区(FilterBuffer):存放从主缓冲区中过滤掉的数据。删除缓冲区(DeleteBuffer):存放从主缓冲区中删除掉的数据。原始缓冲区(OriginalBuffer):存放从数据库里检索到的原始数据,它由PowerBuild在 内部维护,可以利用该缓冲区中的数据进行数据恢复,在应用程序中实现Undo功能。2行与列的修改状态行与列的修改状态在PowerBui

3、lder中为dwItemStatus枚举类型值,它们包 含:NotModified!:指定行或列处的信息与最初检索出的相同。DataModified!:指定列 或行中某列处的信息在检索出后发生了改变。New!:指定行是新行,但此行的列并未赋值。本状态只适用于行,不适用于单个列。NewModified!:指定行是新行且行中的列已经赋值。新行的状态成为NewModified!,既可能是用户输入或使用Setitem函数造成的,也可能是由于它的某列具有缺省值。本状态 只适用于行,不适用于单个列。数据窗口中行或列的修改状态决定Update()函数将为该行或该列产生何种类型的SQL 语句。对主缓冲区和过滤

4、缓冲区中的行,Update为状态是NewModified!的行产生Insert语 句,为状态是DateModified!的行产生Update语句,只有状态是DataModified!的列才会包 含在Update语句中。对删除缓冲区中的行,若其状态是New!或 NewModified!,则Update 语句不会为其产生Update语句。利用函数GetitemStatus可获得某行或某列的修改状态,利用函数SetitemStatus可改变 某行或某列的修改状态。语法:dwcontrol.GetitemStatus(row,column,dwbuffer)dwcontrol.SetitemStatu

5、s(row,column,dwbuffer,status)对于如何改变状态,PowerBuilder有一些限制,表1给出了这种限制,其中Yes表示可 把初始状态改变为指定状态,No则表示不可以。表1数据修改状态设置约束初始状态指定状态New!NewModified!DataModified!NotModified!New!YesYesNoNewModified!NoYesNew!DataModified!NewModified!YesYesNotModified!YesYesYes通过观察表1,我们可以发现这样一种情况:假设某个记录的状态为New!,那么不能 直接改为NotModified!但

6、可先将它改为DataModified!,然后再改为NotModified!。利用函数RowsCopy、RowsMove可以在不同DataWindow控件(或DataStore对象)之 间或同一 DataWindow控件(或DataStore对象)的不同缓冲区之间复制、移动数据行。语法:dwcontrol.RowsCopy(startrow,endrow,copybuffer,targetdw,beforerow,targetbuffer) dwcontrol.RowsMove(startrow,endrow,movebuffer,targetdw,beforerow,targetbuffer)

7、当某行在删除缓冲区中时,或者在主缓冲区或过滤缓冲区中,并且状态为NewModified! 或DataModified!时,其更新标志被设置。函数ResetUpdate清除DataWindow或DataStore 中主缓冲区和过滤缓冲区中的更新标志并清空其删除缓冲区。清除更新标志后,所有行的状 态为 NotModified!或 New!。语法:dwcontrol.ResetUpdate()3应用举例(1)在数据窗口中,某些列常具有缺省值,或我们在执行了 InsertRow操作后立即使用SetItem 函数为某些列赋值。如果用户执行了一个插入操作后立即关闭窗口会触发closequery事件, 这时

8、会提示用户记录已经被修改,但用户并没有感觉到对数据的修改。为避免出现这种情况, 可作如下处理:intli_new_rowli_new_row=dw_l.InsertRow(0)/通过SetItem函数为列赋值dw_l.SetItem()/将新行的修改状态置为NotModified!dw_l.SetItemStatus(li_new_row,0,primary!,NotModified!)(2)在应用程序中提供Undo功能,将实现很好的用户友好效果。本例中将数据窗口 dw_l 中的当前行、当前列的显示值置为从数据库中检索出的原始值:string ls_ori_valls_ori_val=dw_l

9、.GetItemString(dw_l.GetRow(),dw_l.GetColumn(),&Primary!,True)dw_l.SetText(ls_ori_val)(3)在协调两个DataWindow对象dw_l、dw_2的更新时,若其中一个更新失败,应阻止 重设更新标志,以便回滚事务,一旦所有数据窗口都已成功更新,就可使用COMMIT结束 该事务,并使用ReSetUpdate重新设置数据窗口的状态标志。Int li_ret_codeli_ret_code=dw_l.Update(True,False)/阻止重设更新标志If li_ret_code=l thenli_ret_code=dw_2.Update(True,False)/阻止重设更新标志lf li_ret_code=l thendw_l.ResetUpdate()/清 除更新标志dw_2.ResetUpdate()/清 除更新标志COMMIT;ElseROL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论