PB窗口之间传递多参数的方法:

合集下载

pb传递多个参数

pb传递多个参数

消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口操作时参数赋予的类
型)。根据parameter / returnvalue参数数据类型的不同,该参数的值保存在Message对象的不同属性
中。parameter / returnvalue参数的类型与使用的Message对象属性的对应关系如下表:
Name Character
Email Character
Homepage Character
… …
在调用脚本中,使用如下代码:
lstr_declaredstr lstr_parmtotrans
lstr_parmtotrans.id=1
在 w_wantparm 的 open 事件中访问传来的参数:
u_n_parmtostore lnv_getparam
integer li_getid
string ls_getnam
在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,
参数类型 Message对象属性
Numeric(数值) Message.DoubleParm
PowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParm
String(字符串) Message.StringParm
应用程序根据OpenWithParm()等函数的parameter / returnvalue参数类型,从Message消息对象的
integer li_getid
string ls_getname
string ls_getemail

PB数据窗口常用函数方法

PB数据窗口常用函数方法
dwcontrol.SetItemStatus ( row, column, dwbuffer, status )
其中,row参数指定将要修改状态的行;column参数指定将要修改状态的列(可以是整型的列号,也可以是string类型的列名),当列号为0时表示要修改row指定的整行的状态;dwbuffer指定要修改哪个缓冲区(肯定不能是original),status为上面的四个取值中的一个,但不是任意的取值,因为有些状态不能用该函数设置成另外一种状态,必须是能够转换的状态。下面列出了能够转换的状态。
integer dwcontrol.SetColumn ( string column)
integer dwcontrol.SetColumn ( integer column)
设置当前行
integer dwcontrol.SetRow ( long row )
得到当前列
integer dwcontrol.GetColumn ( )
返回值:执行成功则返回1,发生错误则返回-1,如果dwcontrol为Null则返回Null
★AcceptText
语法:dwcontrol.AcceptText ( )
功能:该函数执行时,首先对当前编辑框中的内容进行对应字段的校验规则,能够通过校验规则,则保存在对应字段中,否则显示校验信息提示错误。需要执行该函数的原因是,当在某字段上的编辑框中输入内容而没有移动光标到别的字段上时,其他控件获得焦点,此时编辑框中的内容不能被保存到字段中,所以就应该在数据窗口失去焦点时执行该函数。
Next
dw_1.SetColumn("sex") //选中性别列,保证最后一个也要通过校验规则

PB的小技巧

PB的小技巧

PB的小技巧1.如何使DataWindow中的数据只能追加新记录而不能修改。

利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")2. 允许从空的非字符字段跳离string ss = this.dwDescribe(this.GetColumnName()+".coltype")//s = this.dwDescribe("#"+String(this.GetColumn())+".coltype")CHOOSE CASE sCASE "number"IF Trim(this.GetText()) = "" THENint null_numSetNull(null_num)this.SetItem(this.GetRow(),this.GetColumn(),null_num)this.SetActionCode(3)END IFCASE "date"IF Trim(this.GetText()) = "" THENdate null_dateSetNull(null_date)this.SetItem(this.GetRow(),this.GetColumn(),null_date)this.SetActionCode(3)END IFCASE "time"IF Trim(this.GetText()) = "" THENtime null_timeSetNull(null_time)this.SetItem(this.GetRow(),this.GetColumn(),null_time)this.SetActionCode(3)END IFCASE "datetime"IF Trim(this.GetText()) = "" THENdate null_datetimeSetNull(null_datetime)this.SetItem(this.GetRow(),this.GetColumn(),null_datetime)this.SetActionCode(3)END IFEND CHOOSE3. 当我们为Datawindow的每一行显示行号时可以简单的放一个表达式为GetRow() -- 计算列。

PB中协调多数据窗口数据操纵的一种解决方法

PB中协调多数据窗口数据操纵的一种解决方法

PB中协调多数据窗口数据操纵的一种解决方法PB中协调多数据窗口数据操纵的一种解决方法1、问题的提出数据窗口是PB中检索、表现和操纵数据的对象。

如果一个数据表的列不多,用单数据窗口操纵数据很易实现,但在实际应用中,数据表的列数动辄几十,甚至上百也并不少见,这时用单数据窗口滚动显然不方便,一个自然的想法是采用TAB控件和TAB页,在每个TAB页上放置一个数据窗口控件,每个数据窗口控件分门别类操纵数据表的列,但随之而来的问题是如何协调分布在这些数据窗口中录入或修改数据的存储,针对每个数据窗口发布一个UPDATE()函数的调用不可行。

我们在实际开发中经过探索,增加一个后台的数据窗口做中介,解决了多数据窗口操纵数据的问题。

2、协调多数据窗口数据操纵的一种解决方法基本思路是:在进行数据操纵的数据窗口控件之外,另外放置一个数据窗口控件,设置其不可见,并设其数据窗口对象为一个选择了数据表中所有列的数据窗口,其他数据窗口控件中录入或修改的数据实时地传送过来,对该控件的数据进行更新操作即可。

不失一般性,下面以PB自带数据库psDemoDB.db中的customer表的数据录入为例来说明。

Customer表有"id","fname","lname","address","city","state","zip","phone","com pany"九个列,其中"id"为integer类型,其余均为char类型。

(1)创建数据窗口建立三个数据窗口d_1、d_2、d_3,数据窗口d_1选"id","fname","lname"三列,d_2中选"address","city","state"三列,d_3选"zip",""phone","company_name"三列。

PB的数据窗口操作

PB的数据窗口操作

ls1= dwo.Primary[row]★SetTransObject语法:dwcontrol.SetTransObject ( transaction )功能:给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是SQLCA。

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

★Retrieve语法:dwcontrol.Retrieve ( {, argument, argument . . . } )功能:使用数据窗口控件的当前事务对象检索数据库中的数据。

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

返回值:返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数,如果检索数据时发生错误则返回-1,如果任意参数为Null则返回Null*该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼容。

个数不能少于数据窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数,多的参数忽略。

★DeleteRow语法:dwcontrol.DeleteRow ( row )功能:删除数据窗口dwcontrol中的第row行数据,如果row为0则表示删除当前行的数据。

返回值:执行成功则返回1,执行错误则返回-1,如果任意参数为Null则返回Null。

*该函数执行后只是将被删除的数据从数据窗口的主缓存区移放到Deleted缓冲区,在数据库中并没有真正删除数据,当正确执行了Update函数并且使用commit语句提交了事务后,才真正从数据库中删除该数据★InsertRow语法:dwcontrol.InsertRow ( row )功能:在数据窗口dwcontrol的第row行前插入一行空白数据。

当指定row为0时,表示在当前行之前插入一行空白数据。

PB窗口使用技巧

PB窗口使用技巧

[PB]-窗口使用技巧**在打开和关闭窗口时进行数据传递OpenWithParm(windowvar,parmeter{,parent})其中windowvar是要打开的窗口名称,可以是window画板中定义的窗口,也可以是脚本中定义的窗口变量;parameter是要传递的参数,只能是String,Numeric或者PowerObject类型,该参数根据类型保存在Message的成员变量中传递个要打开的窗口;parent是一个已经打开的窗口名称,该窗口要成为windowvar窗口的父窗口。

函数执行成功返回1,否则返回-1,如果有参数为null 则返回null。

对象Message是一个结构类型的全局变量,并有很多的成员变量。

在传递参数时三个成员变量用来读取传递的数据,它们是:Message.DoubleParm:用来传递Numeric类型的数据。

Message.PowerObjectParm:用来传递PowerObject对象类型的数据,象数据窗口、按键、列表框和拥护自定义的结构等都可以使用该变量进行传递。

Message.StringParm:用来传递String类型的数据。

当使用函数OpenWithParm打开窗口后,应该在进行其他操作之前首先读取传递过来的参数,以免其他操作修改Message中的成员变量。

CloseWithReturn(windowname,Returnvalue)其中,windowname是要关闭的窗口的名称,一般是脚本所在的窗口的名称;Returnvalue是要返回的数值,和上述函数OpenWithParm的完全相同。

函数正确执行返回1,否则返回-1,当有参数为null时则返回null。

*只要是response类型的窗口,使用该函数就能有效地传递参数;该窗口不一定非得是用OpenWithParm打开的。

在打开该response的窗口中可以读取传递过来的参数。

总之,使用CloseWithReturn函数时一定要注意,只有被关闭的窗口是response 类型才能有效地获取返回参数。

PB窗口之间传递多参数的方法

PB窗口之间传递多参数的方法

接下来在打开窗口w_3的open事件中,获取用户对象信息:
uo_para uo_Getpara
uo_Getpara = message.powerobjectparm
sle_1.Text = uo_Getpara.id
sle_2.Text = uo_
应用程序根据OpenWithParm()等函数的parameter / returnvalue参数类型,从Message消息对象的不同属性中提取该函数B中如果是传递一个参数,是很容易实现的。在调用脚本中,可以使用如下代码:
openwithparm(w_1,"独孤求败")
string name
string sex
string loca
在调用脚本中(本例使用才菜单clicked中),使用如下代码:
uo_para uo_Tranpara
uo_Tranpara = create uo_para
PowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParm
String(字符串) Message.StringParm
参数类 Message对象属性
Numeric(数值) Message.DoubleParm
sle_3.Text = uo_Getpara.sex
sle_4.Text = uo_Getpara.loca
以上两种方法比较而言,第一种方法虽然比较简单实用,但是如果遇上较复杂的数据时,便不能在一个结构数据中充分描述了;
第二种方法不但方便灵活,而且可以传送复杂的数据。当然,参数的传送不止以上的几种方法,你也可以使用全局变量或是公共可

PB窗口使用技巧

PB窗口使用技巧

[PB]-窗口使用技巧**在打开和关闭窗口时进行数据传递OpenWithParm(windowvar,parmeter{,parent})其中windowvar是要打开的窗口名称,可以是window画板中定义的窗口,也可以是脚本中定义的窗口变量;parameter是要传递的参数,只能是String,Numeric或者PowerObject类型,该参数根据类型保存在Message的成员变量中传递个要打开的窗口;parent是一个已经打开的窗口名称,该窗口要成为windowvar窗口的父窗口。

函数执行成功返回1,否则返回-1,如果有参数为null 则返回null。

对象Message是一个结构类型的全局变量,并有很多的成员变量。

在传递参数时三个成员变量用来读取传递的数据,它们是:Message.DoubleParm:用来传递Numeric类型的数据。

Message.PowerObjectParm:用来传递PowerObject对象类型的数据,象数据窗口、按键、列表框和拥护自定义的结构等都可以使用该变量进行传递。

Message.StringParm:用来传递String类型的数据。

当使用函数OpenWithParm打开窗口后,应该在进行其他操作之前首先读取传递过来的参数,以免其他操作修改Message中的成员变量。

CloseWithReturn(windowname,Returnvalue)其中,windowname是要关闭的窗口的名称,一般是脚本所在的窗口的名称;Returnvalue是要返回的数值,和上述函数OpenWithParm的完全相同。

函数正确执行返回1,否则返回-1,当有参数为null时则返回null。

*只要是response类型的窗口,使用该函数就能有效地传递参数;该窗口不一定非得是用OpenWithParm打开的。

在打开该response的窗口中可以读取传递过来的参数。

总之,使用CloseWithReturn函数时一定要注意,只有被关闭的窗口是response 类型才能有效地获取返回参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PB窗口之间传递多参数的方法:
在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,windowname.OpenUserObjectWithParm等都有一个在进行窗口操作(打开或者关闭)时存入Message消息对象的参数parameter或returnvalue。

消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口操作时参数赋予的类型)。

根据parameter / returnvalue参数数据类型的不同,该参数的值保存在Message对象的不同属性中。

parameter / returnvalue参数的类型与使用的Message对象属性的对应关系如下表:
参数类型Message对象属性
Numeric(数值) Message.DoubleParm
PowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParm
String(字符串) Message.StringParm
应用程序根据OpenWithParm()等函数的parameter / returnvalue参数类型,从Message 消息对象的不同属性中提取该函数并传送给被打开窗口的值。

在PB中如果是传递一个参数,是很容易实现的。

在调用脚本中,可以使用如下代码:openwithparm(w_wantparm,parmtotrans)
接着在打开窗口w_wantparm的open事件中键入:
string ls_getparm
ls_getparm=message.stringparm

如果需要传递多个参数,可以使用如下两种方法:
方法一
定义结构变量:lstr_declaredstr,其中包含你想传递的各种参数:
变量名变量类型
ID Unsignedlong
Name Character
Email Character
Homepage Character
……
在调用脚本中,使用如下代码:
lstr_declaredstr lstr_parmtotrans
lstr_parmtotrans.id=1
lstr_="panya"
lstr_paramtotrans.email="panya@"
lstr_paramtotrans.homepage=" ";

openwithparm(w_wantparm,parmtotrans)
接下来在打开窗口w_wantparm的open事件中,获取结构信息:
lstr_declaredstr lstr_getparm
integer li_getid
string ls_getname
string ls_getemail
string ls_gethomepage
lstr_getparm = message.powerobjectparm
li_getid = lstr_getparm.id
ls_getname = lstr_
ls_geemail = lstr_getparm.email
ls_gethomepage = lstr_getparm.homepage

其中,lstr_declaredstr为用户自定义结构数据类型,是值传送
其中,lstr_declaredstr为用户自定义结构数据类型,是值传送的。

方法二
首先创建一个类用户对象
u_n_parmtostore
在该用户对象中将你需要传递的各种参数申明成实例变量,例如:
Public:
Integer ID
String Name
String Email
String Homepage
...
打开窗口w_wantparm,并传递多个参数:
u_n_parmtostore lnv_paramtotrans
lnv_paramtotrans.id=1
lnv_="panya"
lnv_paramtotrans.email="panya@"
lnv_paramtotrans.homepage=" ";

OpenWithParm ( w_wantparm, lnv_paramtotrans )
在w_wantparm 的open 事件中访问传来的参数:
u_n_parmtostore lnv_getparam
integer li_getid
string ls_getname
string ls_getemail
string ls_gethomepage
lnv_getparam = Message.PowerObjectParm
li_getid=lnv_getparam.id
ls_getname=lnv_
ls_gethomepage=lnv_getparam.homepage
ls_getemail=lnv_getparam.email

以上两种方法比较而言,第一种方法虽然比较简单实用,但是如果遇上较复杂的数据时,便不能在一个结构数据中充分描述了;第二种方法不但方便灵活,而且可以传送复杂的数据。

当然,参数的传送不止以上的几种方法,你也可以使用全局变量或是公共可访问的窗口实例变量来传送参数,或者在窗口中调用一个函数,并传递所需的参数,在此就不再赘述了。

另外,用Message传递参数必须注意以下几点:
1. 最好执行完窗口操作(打开或关闭)后马上将Message消息对象的值传给变量,这是因为Message是全局使用的对象,每一次事件被触发或传送时都会被使用,其他Script 也有可能用到Message消息对象,因此它有被覆盖的危险。

2.避免传送NULL对象,以免程序出错。

相关文档
最新文档