首页 >> 大全

浅议PB中数据窗口缓冲区与数据修改状态,filter

2023-10-31 大全 23 作者:考证青年

浅议PB中数据窗口缓冲区与数据修改状态,,之后不想修改之方法

置顶2014年12月14日 21:34:阅读数:4495

--引用

摘要:文章描述了中数据窗口缓冲区,详细介绍了数据窗口中行与列的修改状态以及提供的相关函数,并给出了几则应用实例。

关键词:数据窗口缓冲区

中图分类号:TP311.131

文献标识码:A

是当今最先进的数据库开发工具之一,它以 开放性、可移植性以及易用性而闻名于世。的突出特点是给应用开发人员提供了非常方便的开发环境和工具,而数据窗口技术则是其中最 耀眼的闪光点。利用数据窗口,开发人员可以完成绝大多数数据操作任务。本文从数据窗口中数据的修改状态的角度出发,介绍利用数据窗口进行应用开发的一些技 巧。

1数据窗口缓冲区

在应用中,每个数据窗口控件都要检索4个内存缓冲区,它们是:

·主缓冲区():存放检索出来的数据,但不包括过滤掉和删除掉的数据。

·过滤缓冲区():存放从主缓冲区中过滤掉的数据。

·删除缓冲区():存放从主缓冲区中删除掉的数据。

·原始缓冲区():存放从数据库里检索到的原始数据,它由在内部维护,可以利用该缓冲区中的数据进行数据恢复,在应用程序中实现Undo功能。

2行与列的修改状态

行与列的修改状态在中为枚举类型值,它们包含: ·!:指定行或列处的信息与最初检索出的相同。 ·!:指定列或行中某列处的信息在检索出后发生了改变。

·New!:指定行是新行,但此行的列并未赋值。本状态只适用于行,不适用于单个列。

·!:指定行是新行且行中的列已经赋值。新行的状态成为!,既可能是用户输入或使用函数造成的,也可能是由于它的某列具有缺省值。本状态只适用于行,不适用于单个列。

数据窗口中行或列的修改状态决定()函数将为该行或该列产生何种类型的SQL语句。 对主缓冲区和过滤缓冲区中的行,为状态是!的行产生语句,为状态是!的行产生 语句,只有状态是!的列才会包含在语句中。对删除缓冲区中的行,若其状态是New!或 !,则语句不会为其产生语句。

利用函数可获得某行或某列的修改状态,利用函数可改变某行或某列的修改状态。

语法:

.(row,,)

.(row,,,)

对于如何改变状态,有一些限制,表1给出了这种限制,其中Yes表示可把初始状态改变为指定状态,No则表示不可以。

表1数据修改状态设置约束

初始状态

指定状态

New!

!

!

!

New!

——

Yes

Yes

No

!

No

——

Yes

New!

!

!

Yes

——

Yes

!

Yes

Yes

Yes

——

通过观察表1,我们可以发现这样一种情况:假设某个记录的状态为New!,那么不能直接改为!但可先将它改为!,然后再改为!。

利用函数、可以在不同控件(或对象)之间或同一控件(或对象)的不同缓冲区之间复制、移动数据行。

语法:

.(,,,,,)

.(,,,,,)

当某行在删除缓冲区中时,或者在主缓冲区或过滤缓冲区中,并且状态为!或 !时,其更新标志被设置。函数清除或中主缓冲区和过滤缓冲区中的 更新标志并清空其删除缓冲区。清除更新标志后,所有行的状态为!或New!。

语法:.()

3应用举例

(1)在数据窗口中,某些列常具有缺省值,或我们在执行了操作后立即使用 函数为某些列赋值。如果用户执行了一个插入操作后立即关闭窗口会触发事件,这时会提示用户记录已经被修改,但用户并没 有感觉到对数据的修改。为避免出现这种情况,可作如下处理:

=dw_l.(0)

//通过函数为列赋值

dw_l.(……)

//将新行的修改状态置为!

dw_l.(,0,!,!)

(2)在应用程序中提供Undo功能,将实现很好的用户友好效果。本例中将数据窗口dw_l中的当前行、当前列的显示值置为从数据库中检索出的原始值:

=dw_l.(dw_l.(),dw_l.(),

&!,True)

dw_l.()

(3)在协调两个对象dw_l、dw_2的更新时,若其中一个更新失败,应阻止重设更新标志,以便回滚事务,一旦所有数据窗口都已成功更新,就可使用结束该事务,并使用重新设置数据窗口的状态标志。

=dw_l.(True,False)//阻止重设更新标志

=lthen

=dw_2.(True,False)//阻止重设更新标志

=lthen

dw_l.()//清除更新标志

dw_2.()//清除更新标志

数据缓冲区太小是什么意思__数据缓冲区是什么

Else

;

Endif

Endif

(4)将数据行从删除缓冲区移到主缓冲区,实现取消删除的功能。

dw_l.(l,dw_l.(),!,dw_l,l,!)

(5)讲缓冲区的修改状态改为未修改,更新时候不保存缓冲区内的数据

举例

if tab_1..rb_cq. then

for li_i = 1 to tab_1...()

tab_1...(li_i, 0,!, !)

next

end if

= tab_1....jlxh[i]

= .find("yzxh = "+(),1,.())

if > 0 then

tab_1....sybz[i] = 1

end if

方法

功能:中移除行操作,一旦行被移除则改行不能修改或保存,除非再次从数据库中。

语法: . (long , long , )

参数: 数据窗口

将要移除的开始行

将要移除的结束行

缓存区的值(! ,! ,! )

示例:dw_1.(1, dw_1.(), !)

将dw_1中从第1行到()行移除到!缓冲区中,则dw_1调用()方法时,以上被移除的行不会发生变化。[1]

举例

for i = 1 to tab_1...()

= tab_1....pspb[i]

= tab_1....psjg[i]

= tab_1....ypyf[i]

if = 0 then

if = and 1 then //皮试用,非阳性

if = 0 or = 1 then

tab_1...(i)

i --

end if

next

tab_1...( 1, tab_1...(), !)

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了