PB数据窗口控件Word格式文档下载.docx

上传人:b****6 文档编号:20250681 上传时间:2023-01-21 格式:DOCX 页数:14 大小:26.88KB
下载 相关 举报
PB数据窗口控件Word格式文档下载.docx_第1页
第1页 / 共14页
PB数据窗口控件Word格式文档下载.docx_第2页
第2页 / 共14页
PB数据窗口控件Word格式文档下载.docx_第3页
第3页 / 共14页
PB数据窗口控件Word格式文档下载.docx_第4页
第4页 / 共14页
PB数据窗口控件Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

PB数据窗口控件Word格式文档下载.docx

《PB数据窗口控件Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《PB数据窗口控件Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

PB数据窗口控件Word格式文档下载.docx

3、过滤缓冲区-Filter

该缓冲区中保存的是没有通过过滤规则的所有数据,这些数据在存储时同主缓存区的数据一起生成相应的insert或update语句。

4、原始缓冲区-original

用来保存从数据库中检索到的初始值,在保存数据时用来生成where语句。

上面这四个缓冲区中,original缓冲区在脚本中很少使用,其他三个经常涉及到,很多数据窗口函数都需要指定对这三个缓冲区中的哪个进行操作,大多数情况下都使用缺省的缓冲区Primary!

这三个缓冲区,除了保存相应的数据外,都自动维护这些数据的修改标志,它们之间的协作也是自动维护的。

例如,当使用过滤函数时,没有通过过滤规则的数据自动从Primary缓存区移送到Filter缓存区;

执行删除操作时,数据自动从Primary缓存区移送到Delete缓存区。

所有这些数据的移送无需脚本的干预,只管使用相应的函数即可。

■DWBuffer

Primary!

0

Delete!

1

Filter!

2

■DWItemStatus

NotModified!

DataModified!

New!

NewModified!

3

■编辑控件

和数据窗口控件打交道都是通过编辑控件进行的。

在数据窗口中录入数据、修改数据,实际上是在修改单元上的编辑控件中的内容。

当编辑控件移动到另外单元上之前,要对编辑控件中的数据进行校验,如果能通过字段的校验规则,就保存到字段中。

编辑控件是可以移动的,需要编辑哪个单元,编辑控件就移动到哪个单元上,接受输入或者修改。

编辑控件在没有离开当前字段时,用户录入或者修改的数据就不会被保存到字段中,如何确保在数据窗口失去焦点时,最后位置上编辑框中的内容不被遗漏呢?

前面介绍了在数据窗口的LoseFocus事件中编写如下脚本:

this.AcceptText()

这个方法在很多情况下能解决该问题。

美中不足的是,如果编辑框中的内容不能通过字段的校验规则,有时会显示两次错误信息窗口。

造成两个错误信息窗口,往往是在选择其他单元时发生,在数据窗口失去焦点之前(如单击“保存”按钮等)只会显示一个错误信息窗口。

用户选择其他单元时,编辑框中的数据开始进行校验,不能通过校验规则,显示校验错误信息,在显示校验错误信息时数据窗口失去焦点,触发数据窗口的LoseFocus事件执行AcceptText函数,又一次显示校验错误窗口。

所以,显示两次校验错误窗口的原因是LoseFocus事件中的AcceptText函数造成的。

可以想法让该函数在这种情况下不执行。

为此定义一个实例变量:

Booleanib_accept=True

该变量用来表示是否正确通过了校验,然后将LoseFocus中的脚本改成下面的脚本:

Ifib_acceptThen

This.AcceptText()

Else

ib_accept=true

EndIf

在数据窗口的ItemError事件中编写脚本:

ib_accept=False

这样就可以解决显示两个校验错误信息窗口了,并且不会遗漏最后一个编辑框中的内容。

*当在某个单元中修改或者录入数据后,编辑框要离开时,要进行4个校验步骤,前面两个步骤由PowerBuilder完成,后面两个由开发者编写。

(1)看数据和编辑前相比是否发生了改变,没有改变则不做任何处理。

(2)检查测试此值是否违反了任何一个在字段上定义的有效性校验规则,违反则拒绝接受此值,并触发ItemError事件。

(3)检查此值是否与编辑前真的不同,没有改变则终止有效性校验。

(4)检查开发人员在ItemChanged事件中编写的脚本。

具体的发生情况取决于分配给被称为动作代码的值。

■读取和设置数据

读取:

1、使用函数

dw_1.getitemX()

2、直接使用数据窗口对象属性来读取数据

dw_1.object.data.primary.current[row,column]

该语句的格式是:

dwcontrol.object.data[buffer[.whichvalue]][row,column]

dwcontrol是数据窗口控件名称。

whichvalue既可以是current(缺省值),也可以是original。

这样就允许用户访问一个列的初始值或当前值。

row和column是要访问的单元所在的行号及列号。

object、data是保留字,buffer是缓存区的名称,有Delete、Primary、Filter。

这种引用方法速度比较快,尤其读取大量数据时。

设置:

使用函数

SetItem()

SetText()

【属性】

▲DataObject

数据源

▲Title

用来显示在数据窗口的标题条(TitleBar)上的一个字符串。

建议该字符串要有一定的含义,能够标明数据窗口的用途或者其中的数据的类别。

该属性的缺省值none。

当属性TitleBar为True时,该属性起作用。

▲Visible

是否显示数据窗口控件,缺省为True。

有时为了向其他数据窗口提供数据,除了使用datastore控件外,还可以使用Visible属性为False的数据窗口。

如果仅仅是为了处理数据,不赞成使用Visible属性为False的数据窗口,而应该使用Datastore对象,这样可以节省计算机资源,提高处理效率。

▲Enabled

数据窗口控件是否可以获得焦点,缺省为True。

可以在脚本中修改该属性以限制用户执行了某些特定操作后再允许操作数据窗口。

▲TitleBar

是否显示标题条,缺省为False。

使用该属性可以在数据窗口上部显示标题条,类似于窗口的标题条。

设置属性为True后,用户就能够拖动数据窗口。

▲ControlMenu

是否显示控制菜单,缺省为False。

该属性当TitleBar属性为True时才有效。

▲MaxBox和MinBox

是否显示最大和最小控制按钮,缺省为False。

当属性TitleBar为True时,该属性有效。

属性TitleBar和ControlMenu、MinBox、MaxBox共同控制数据窗口的外观是否像窗口的外观。

▲HscrollBar和VscrollBar

这两个属性用来控制数据窗口控件的横向和纵向滚动条是否显示。

设置为True时,滚动条可以根据需要自动显示,数据够显示时则不出现滚动条。

▲LiveScroll

该属性是一个比较重要的属性,缺省为True,表示当拖动垂直滚动滑块时,数据窗口中的行也跟随滚动;

属性为False时表示拖动垂直滚动滑块时,数据窗口中的行不跟随滚动,放开垂直滚动滑块后,数据窗口中的数据才滚动到适当数据行上。

建议选中该属性,这样当数据很多时,用户就可以拖动垂直滚动小滑块来快速浏览数据了。

▲HsplitScroll

该属性是一个非常有实际用途的属性。

该属性决定是否显示分割滚动条,缺省为False。

当数据窗口比较宽,要显示水平滚动条时,建议将该属性设置为True。

▲RightToLeft

该属性为True时表示数据窗口中的所有字符都从右向左显示。

缺省为False。

当设置该属性为True时,还必须要操作系统的支持,该属性才能起作用。

▲Resizeable

用户是否可以调整数据窗口的大小,缺省为False。

▲Border

是否显示边框,默认为True,只有在True的情况下BorderStyle才起作用

▲BorderStyle

取值为枚举型,用来定义数据窗口边框样式。

有四个取值:

StyleBox!

、StyleLowered!

、StyleRaised!

、StyleShadowBox!

,缺省边框类型为StyleLowered。

▲Icon

用来给数据窗口指定标题条左上角的图形,缺省为Windows标志图。

【事件】

◆Clicked

鼠标左键在数据窗口控件上任意位置单击时触发该事件。

该事件中有4个参数,可以在脚本中直接使用。

xpos:

表示和数据窗口最左侧的距离的整数。

ypos:

表示和数据窗口最上部的距离的整数,不包括标题条。

row:

表示用户所单击的行号的long型数。

dwo:

用户单击对象,是DWObject类型。

在该事件的脚本中使用这些参数,可以给用户一些提示信息或者获取用户单击内容的信息。

返回值:

0表示继续处理,这是缺省值。

1表示停止处理。

*当选择和当前行不同的数据行时可以触发ItemFocusChanged和RowFocusChanged事件,当单击当前行的其他字段时可以触发ItemFocusChanged事件。

DoubleClicked事件也可以触发该Clicked事件。

◆DBError

在数据窗口控件中发生数据库错误时触发该事件。

该事件有以下参数。

SQLdbcode:

long类型的错误代码,具体含义由DBMS指定。

当DBMS没有指定错误代码时,SQLdbcode提供4个错误代码,-1表示事务对象参数错误而不能联结到数据库,-2表示不能联结到数据库,-3表示因为其他用户的修改导致用来进行检索或修改的键值在数据库中已经不存在而产生错误,-4表示向数据库中写blob对象时失败。

SQLerrtext:

string类型,数据库指定的错误信息。

SQLsyntax:

string类型,当错误发生时,发送到数据库的SQL语句。

buffer:

DWBuffer枚举型,表示导致错误的数据所在的缓冲区。

long类型,导致错误的数据的行号。

可以用return语句任意指定返回什么数据。

有特定含义的返回值是0和1。

0表示显示错误信息,1表示不显示错误信息。

◆DoubleClicked

鼠标左键在数据窗口控件中双击时触发该事件。

该事件中的4个参数和Clicked事件中的名称及含义完全相同,也可以直接在该事件的脚本中直接使用。

该事件的返回值可以用return指定。

有特殊函数的返回值是0,表示继续处理。

◆EditChanged

在数据窗口控件的编辑框中每次按钮都触发该事件。

一般很少在该事件下编写脚本。

该事件提供三个参数。

long类型,当前编辑的行号。

DWObject类型,正在编辑的对象。

data:

String类型,当前编辑框中的内容。

可以用return指定任意返回值,0表示继续处理。

*每次编辑时触发

◆Error

当数据窗口对象中的数据或者表达式错误时触发该事件,在分布式系统中联结发生错误时也会触发该事件。

和DBError事件不同的是,该事件在没有和数据库交互时就有可能触发,而DBError事件触发时肯定和数据库发生了交互。

通常在该事件中编写脚本,提供对错误的处理。

该事件提供了很多参数。

errornumber:

unsignedinteger类型,由PowerBuilder指定的错误代码号。

errortext:

string类型,由PowerBuilder指定的错误信息。

errorwindowmenu:

string类型,造成错误的脚本所在对象的父对象的名称。

errorobject:

string类型,造成错误的脚本所在的对象的名称。

errorscript:

string类型,造成错误的语句所在的脚本的全部内容。

errorline:

unsignedinteger类型,造成错误的语句在其脚本中所占的行号。

action:

在Error事件下的代码执行完后,该参数取值由脚本设定。

可以指定的值有:

ExceptionFail!

表示错误处理失败(执行该值有可能触发应用的SystemError事件);

ExceptionIgnore!

表示忽略错误继续执行(要谨慎使用该取值,因为忽略错误有可能将再次导致其他错误);

ExceptionRetry值只能用于OLE,对于数据窗口控件,没有该取值,该取值表示再次执行刚才造成错误的功能;

ExceptionSubstituteReturnValue!

表示使用参数returnvalue的返回值,而不是返回OLE服务器或数据窗口控件的错误代码,并且取消错误状态。

returnvalue:

当Action指定为ExceptionSubstituteReturnValue!

时返回该参数的取值。

*对于数据窗口控件来说,如果在运算数据或属性表达式时发生了错误,将进行如下的错误处理过程:

a.触发Error事件;

b.如果Error事件中没有脚本或者Action变量设置成ExceptionFail!

,则触发应用的SystemError事件;

c.如果SystemError事件下也没有脚本,便会发生应用程序错误,然后终止应用程序。

所以,在该事件或者应用的SystemError事件下应该编写脚本。

这样才不至于退出应用程序,使用户没有处理的机会,甚至录入了半天的数据连个保存的机会也没有了。

该事件没有返回值,也不在该事件中使用return语句。

◆ItemChanged

当某单元(行和列的交叉点叫做单元)编辑后(内容改变),光标要离开时触发该事件,如使用了Enter按钮、单击了Tab按钮、使用了光标键、在其他字段上单击了鼠标左键等。

当编辑完一个单元的内容而没有离开该单元,这时数据窗口失去焦点,这种情况不会触发该事件(所以在LoseFocus事件中要使用函数AcceptText)。

三个参数row、dwo和data的含义和EditChanged事件的三个参数完全相同。

可以使用return语句返回任意值。

0表示接受刚刚修改的数据,该值是缺省值;

1表示放弃刚才的修改,不允许焦点离开;

2表示放弃刚才的修改,允许焦点离开。

*编辑框内容有变化并离开此编辑框时触发;

注意:

当editchanged事件下有代码,编辑框内容有变化且离开此编辑框时,不会触发此事件

◆ItemError

当某单元被编辑后光标要离开时,如果单元中的新数据不能通过有效性校验,则触发该事件。

(同ItemChanged:

当编辑完一个单元的内容而没有离开该单元,这时数据窗口失去焦点,这种情况不会触发该事件)该事件在ItemChanged事件之前触发,该事件触发就不能再触发ItemChanged事件了。

该事件中的三个参数和ItemChanged事件中的三个参数完全相同。

可以使用return语句返回任意数值,0表示放弃修改的数据,并显示错误信息,焦点不离开该单元,该取值是缺省值;

1表示放弃修改的数据但不显示错误信息提示,焦点不离开该单元;

2表示接受刚刚修改的错误数据;

3表示放弃刚刚修改的数据,并且焦点不离开该单元。

◆ItemFocusChanged

当焦点离开某单元时触发该事件(不管内容有没有改变)。

该事件提供了row和dwo两个参数,含义和前面介绍的完全相同。

可以使用return语句返回任意数值,0表示继续处理。

*不管编辑框中的内容有没有改变,离开编辑框时触发该事件,注意:

当离开数据窗口时不触发

◆PrintEnd

当打印工作完成时触发该事件。

参数PagesPrinted可以在脚本中直接使用,是一个long类型的变量,表示已经被打印的页数。

◆PrintPage

在数据窗口每页进行打印格式处理之前触发该事件。

参数Copy和PageNumber在脚本中可以直接使用,表示该页要打印的份数和当前页的页号。

返回值0表示不要跳过当前页,1表示跳过当前页。

一般在该事件下编写脚本显示打印进度信息,例如:

st_1.text="

正在打印第"

+String(pageNumber)+"

页……"

也可以在该事件中决定是否真正要打印该页。

例如,下面的脚本只打印偶数页码的页面:

IfMod(pagenumber,2)=0Then

return0

return1

◆PrintStart

数据窗口打印开始时触发该事件。

该事件中的参数PagesMax是一个long型变量,表示将要被打印的总页数(不包括跳过的页)。

返回0表示继续处理。

◆RetrieveEnd

当数据窗口检索完毕时触发该事件。

参数rowcount是一个long型变量,表示检索完后检索到的记录数。

◆RetrieveRow

每检索到一条记录时都触发该事件。

参数row是long类型变量,记录当前检索到的数据的序号。

返回值0表示继续检索,1表示停止检索。

检索大量数据之前可以设置中断标志,让用户在检索过程中可以停止检索。

◆RetrieveStart

当数据窗口的检索操作将要开始时触发该事件,该事件中没有参数。

返回值0表示继续执行,该值是缺省值,1表示不执行检索,2表示在检索之前不清除数据行和缓存区。

通常不在该事件下编写脚本,即使编写脚本,一般也是利用返回值2的特性来控制检索操作不清除缓存区,这样可以将检索到的数据添加到数据窗口中,并且在数据窗口中保留检索之前的数据。

◆RowFocusChanged

当前行改变时触发该事件。

CurrentRow参数是一个long类型变量,保存当前记录号。

该事件下的典型编程是修改当前行标识,将当前行明显地标识出来,可以让用户清楚地知道要对哪行进行操作,在该事件和其他事件的配合下共同修改当前行标识。

*不管内容有没有改变,当前行改变时触发;

在离开数据窗口时不触发

*RowFocusChanging:

当前行改变前触发;

参数currentrow触发前所在行,newrow触发后当前行;

rowfocuschanged的currentrow等于rowfocuschanging的newrow

◆ScrollHorizontal

当使用光标键、Tab按钮、滚动条等等在数据窗口中进行水平滚动时触发该事件。

很少在该事件上编写脚本。

◆ScrollVertical

当在数据窗口中使用光标键、滚动条、Tab键等进行上下滚动时触发该事件。

通常在该事件中编写脚本来改变当前行。

因为当上下滚动数据窗口时,如果当前行不在当前显示的区域内,则容易给用户造成错觉,可以在该事件中编写脚本将当前页面的第一行数据设置为当前行。

使用Describe和Evaluate函数可以实现该功能

◆SQLPreview

当执行函数Retrieve、ReselectRow和Update时,SQL语句要提交到DBMS,这时触发该事件。

该事件的参数比较复杂。

request:

取值为PreviewFunctionReselectRow!

、PreviewFunctionRetrieve!

或PreviewFunctionUpdate!

分别代表触发该事件的函数是ReselectRow、Retrieve和Update。

SQLtype:

引起该事件的SQL语句类型。

取值为PreviewDelete!

、PreviewInsert!

、PreviewSelect!

、PreviewUpdate!

分别表示是Delete、Insert、Select、Update语句。

string类型,取值为提交到DBMS的SQL语句。

当前SQL语句所涉及到的数据所在的缓存区,取值为枚举型,Delete!

、Filter!

、Primary!

分别表示删除缓存区、过滤缓存区和主缓存区。

long类型变量,表示该事件中涉及到的记录数。

返回值0表示继续处理,1表示停止处理,2表示处理下一个SQL请求。

◆UpdateEnd

当从数据窗口控件发送来的对数据库的修改都完成后触发该事件。

该事件的三个参数RowsInserted、RowsUpdated、RowsDeleted都是long类型的变量,分别表示插入、修改和删除的记录数。

◆UpdateStart

在调用了update函数之后、开始修改之前触发该事件,该事件没有参数。

返回值0表示继续处理,1表示停止修改。

◆LoseFocus

数据窗口失去焦点时触发。

该事件中编写脚本,主要是保证用户在数据窗口中最后输入的内容不丢失。

数据窗口中的输入内容只有当焦点改变时才真正转交给数据窗口,否则只是保存数据窗口的编辑控件。

脚本比较简单:

*GetFocus:

数据窗口得到焦点时触发。

【函数】

★SetTransObject

语法:

dwcontrol.SetTransObject(transaction)

功能:

给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是SQLCA。

成功设置事务对象则返回1,执行过程中发生了错误则返回-1,有任意参数为Null时返回Null。

★Retrieve

dwcontrol.Retrieve({,argument,argument...})

使用数据窗口控件的当前事务对象检索数据库中的数据。

如果数据窗口控件对应的数据窗口对象定义了检索参数,则应该在该函数中指定检索参数,参数的个数和数据窗口对象的检索变量个数相等,对应的数据类型相兼容。

返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1