深入了解PB数据窗口数据录入的处理机制

作者:达通兴电脑科技公司(www.study01job.com) 郭宝利

和数据窗口控件打交道都是通过编辑控件进行的。在数据窗口中录入数据、修改数据,实际上是在修改单元上的编辑控件中的内容。当编辑控件移动到另外单元上之前,要对编辑控件中的数据进行校验,如果能通过字段的校验规则,就保存到字段中。编辑控件是可以移动的,需要编辑哪个单元,编辑控件就移动到哪个单元上,接受输入或者修改。
  对于熟悉Microsoft Excel的人来说,编辑控件可以看成是Excel网格中的单元格。当用户在一个单元格中输入一个公式,它不会被接受和计算,直到用户移到其他单元格时才进行公式正确性检查,如果错误则不能移动到其他单元格中。数据窗口控件使用了同样的概念。
  编辑控件在没有离开当前字段时,用户录入或者修改的数据就不会被保存到字段中,如何确保在数据窗口失去焦点时,最后位置上编辑框中的内容不被遗漏呢?前面介绍了在数据窗口的LoseFocus事件中编写如下脚本:
  this.AcceptText()
  这个方法在很多情况下能解决该问题。美中不足的是,如果编辑框中的内容不能通过字段的校验规则,有时会显示两次错误信息窗口。造成两个错误信息窗口,往往是在选择其他单元时发生,在数据窗口失去焦点之前(如单击“保存”按钮等)只会显示一个错误信息窗口。用户选择其他单元时,编辑框中的数据开始进行校验,不能通过校验规则,显示校验错误信息,在显示校验错误信息时数据窗口失去焦点,触发数据窗口的LoseFocus事件执行AcceptText函数,又一次显示校验错误窗口。
  所以,显示两次校验错误窗口的原因是LoseFocus事件中的AcceptText函数造成的。可以想法让该函数在这种情况下不执行。为此定义一个实例变量:
  Boolean ib_accept = True
  该变量用来表示是否正确通过了校验,然后将LoseFocus中的脚本改成下面的脚本:
  If ib_accept Then
  This.AcceptText()
  Else
  ib_accept = true
  End If
  在数据窗口的ItemError事件中编写脚本:
  ib_accept = False
  这样就可以解决显示两个校验错误信息窗口了,并且不会遗漏最后一个编辑框中的内容。
  当在某个单元中修改或者录入数据后,编辑框要离开时,要进行4个校验步骤,前面两个步骤由PowerBuilder完成,后面两个由开发者编写。
  (1)看数据和编辑前相比是否发生了改变,没有改变则不做任何处理。
  (2)检查测试此值是否违反了任何一个在字段上定义的有效性校验规则,违反则拒绝接受此值,并触发ItemError事件。
  (3)检查此值是否与编辑前真的不同,没有改变则终止有效性校验。
  (4)检查开发人员在ItemChanged事件中编写的脚本。具体的发生情况取决于分配给被称为动作代码的值。

时间: 2024-10-02 16:54:39

深入了解PB数据窗口数据录入的处理机制的相关文章

pb数据窗口编程技巧十则

Pb(PowerBuilder)取得巨大成就的原因就是有Datawindow对象,DataWindow是具有功能强大和灵活多变的特点,本人用PowerBuilder开发过一段时间后,总结出一些技巧,以供广大的PB开发者借鉴使用. 一.如何创建一个报表,如下形式 Quantity Running Total 5,000 5,000 2,500 7,500 3,000 10,500 12,000 22,500 对于Running Total列,我们可使用计算列:CumulativeSum(Quant

将pb数据窗口保存为完整的Excel表格

在很多的情况下,我们需要将书局窗口中的数据保存为其他应用程序的格式(比如: MS Excel, Word, email 等).为此Powerbuilder提供了SaveAs函数,然而使SaveAs保存数据窗口为Execl格式时有一些缺点,就是它无法保存我们所见到的格式,一些图形.交叉报表.计算域等等都被丢弃,它仅仅保存了数据窗口buffer中的数据.为了输出交叉报表.组.和计算域等等可视的数据, PowerBuilder 6.5 (after build 444) 提供了新的函数解决这些缺陷,它

PB数据窗口多表更新的实现

PowerBuilder的数据窗口对象是其特有的智能对象,其封装性好.功能强大.表现形式丰富多样,为此,许多MIS开发人员对PowerBuilder推崇备至,将其视为首选开发工具. 一般情况下,一个数据窗口只能更新一个数据库表,但在MIS开发过程中,我们经常遇到这种情况:一个数据窗口中由两个或更多个数据库表作为数据源,并需要对其进行录入或修改,如何给出多表更新的通用解决方案就成为MIS开发人员不容回避的问题.笔者在某管理信息系统的开发过程中,尝试了几种双表更新的解决方法,选出一种比较好的方案,以

pb-PB的数据窗口中怎样选中一列?

问题描述 PB的数据窗口中怎样选中一列? 我做的是一个图书馆信息管理系统,我想在数据窗口中把读者信息中的"在校"的一列都变成"毕业" 的字样,这怎么实现啊! 解决方案 用sql语句,直接指定列名就可以了. 解决方案二: [PB]-数据窗口其他PB数据窗口中多行选中程序PB 数据窗口对象

深入了解Pb的数据窗口

PowerBuilder(以下简称PB)是Powersoft公司(已被Sybase收购)推出的基于客户机/服务器体系结构的强有力的开发工具,自问世以来深受开发人员的好评.Datawindow是PB中获取专利技术的控件,它对数据的处理方法相当简洁,数据窗口能处理各种显示格式.进行报表打印,对复杂的嵌套报表同样处理自如. 数据窗口的处理机制首先是根据所需的显示方式将数据源表中的域设计好,在运行时将所要的数据从数据库服务器上下载到客户机上处理,然后将更改后的数据进行提交(Commit)或回滚(Roll

为PB的freeform数据窗口列穿上彩色外套

pb中数据窗口列的边框风格只有简单几种,如果想要边框颜色是彩色的就没有办法了. 其实可以利用动态创建rectangle,更改数据窗口列的边框颜色,适用free格式(不需要穿外套的列tag值设为0). global type gf_setbordercolor from function_objectendtypeforward prototypesglobal subroutine gf_setbordercolor(datawindow adw, long al_bodercolor)end

pb数组的使用-PB数组的使用及数据窗口的接收

问题描述 PB数组的使用及数据窗口的接收 想要实现这样的一个功能:通过选择左边列的不同方式,右边数据窗口显示相应的内容.如下图:选择左边的1,则右边数据窗口显示1对应的数据,以选择1-5,则显示所有数据. 解决方案 http://chbin95233.blog.163.com/blog/static/3207511120109223111336/?COLLCC=2631048154&COLLCC=2614270938& 解决方案二: PB9核心之--数据窗口对象使用

PB 调用这个数据窗口,报select error:ORA-00936:缺乏表达式

问题描述 PB 调用这个数据窗口,报select error:ORA-00936:缺乏表达式 SELECT "L_HYXM"."HYID", "L_HYXM"."HYXM", "L_HYXM"."KSDM", "L_HYXM"."DJ", "L_HYXM"."SYXM", "L_HYXM"

PB中数据窗口的精确页面打印技术

1.引言 自PowerBuild4.0问世以来,以其简洁高效的集成开发环境.强大的数据窗口技术.(几乎)无所不能的数据库访问能力,越来越受到编程人员的青睐.据Sybase自己的统计,目前全球有60万程序员和系统分析人员在使用他们的Powerbuilder和S-designer,进行各种类型的应用程序开发.最新发布的PowerBuilder6.0族系列开发工具,直接支持ActiveX技术.ServerPush技术,对分布式计算模型的定义更加明确,实现更为简便,并可以利用数据窗口直接生成HTML格式