PB程序间传递字符串变量

合集下载

PB基础语句

PB基础语句

PB 基本语句循环语句PB 基本语句一、赋值语句赋值语句用于给变量、对象属性赋值,这是应用程序中使用最频繁的语句,其语法格式为:variablename = expression其中:⑴variablename是变量名或对象属性;⑵expression是表达式,其数据类型应该与variablename的数据类型兼容。

下面是赋值语句的几个简单示例:Address = "北京"TaxRate = .05Age = 30mle.text="北京欢迎你"PowerScript的赋值语句不支持多重赋值,也就是说,一条赋值语句只对一个变量赋值,不能同时对多个变量赋值。

下面的语句:A=B=0在有些编程语言中同时把A和B均赋值0,但PowerScript中,该语句等价于:A=(B=0)其意义为,检查B等于0是否成立,成立时将TRUE赋给变量A,否则把FALSE赋给变量A。

如果A不是Boolean类型的变量,则上述语句将引起编译错误。

二、条件语句IF语句有两种形式,下面我们按照从简单到复杂的次序逐一介绍。

1. 单行IF ... THEN语句单行IF ... THEN语句的格式为:IF逻辑表达式THEN语句1 [ELSE语句2]单行IF ... THEN语句书写时整条语句写在一行上,当逻辑表达式的结果为True时执行语句1,否则执行语句2(如果有该子句的话)。

例如:IF sle_State.text="BJ" THEN MessageBox("欢迎","北京") 2.多行IF ... THEN语句多行IF ... THEN语句的语法格式为:IF 逻辑表达式 1 THEN语句1[ ELSEIF 逻辑表达式 2 THEN语句2. . .] [ ELSE 语句n]END IF本语句的执行过程为:计算逻辑表达式1,如果其结果为True,则执行语句1,然后离开整个IF语句;否则计算逻辑表达式2,如果其结果为True,则执行语句2,然后离开整个IF语句;... 如果逻辑表达式的结果都是False,且存在ELSE子句,则执行语句3。

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中很实用的小技巧

1.RGB函数计算公式: 颜色值= (65536 * Blue) + (256 * Green) + (Red)2.控件可拖动:send(handle(this),274,61458,0)3.如何用程序控制下拉子数据窗口的下拉和收起用modify或者直接用dw_1.object.col1.dddw.showlist = true4.检索参数有些不需要传入则传%.5.如何屏蔽鼠标滚轮触发在控件的other事件写if message.number = 522 then return 16.得到数据窗口的语法:string ls_dwsyntaxls_dwsyntax=dw_1.describe("datawindow.syntax")7.得到数据窗口中各列及标题:long ll_count,istring ls_value,ls_colnamell_colnum = Long(dw_1.object.datawindow.column.count)for i = 1 to ll_colnum//得到标题头的名字ls_colname = dw_1.describe('#' + string(i) + ".name") + "_t"ls_value = dw_1.describe(ls_colname + ".text")next8.在程序中动态设置初始值:ex:dw_contro.object.columnName.initial = 'xxxx'9.如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行---- 起先对你要显示唯一值的列进行排序:"city A",然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1"10.如何改变列的字体颜色,提醒用户此列已做修改---- 在列的Color属性中,输入如下表达式IF (column_name< >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0))。

浅析PB下动态SQL语句

浅析PB下动态SQL语句

浅析PB下动态SQL语句PB是目前最流行的数据库开发工具之一。

PB提供了在程序代码中加入嵌入式SQL语句的功能来支持对数据库的访问。

但这种嵌入式SQL语句只能支持一些固定的标准的SQL语句,即在进行程序代码编译处理时这些SQL语句必须是确定的,例如:对哪张表哪几个字段进行操作在程序代码中是固定写明的,另外这种方式也不能执行像Creat Table,Creat Database 等这些数据库定义的语句(DDL)。

因此这种嵌入式SQL语句在实际应用中有一定的局限性。

为克服这种方式的局限性,可以使用PB提供的动态SQL语句,这种对数据库访问的方式可以完成嵌入式SQL语句无法实现的功能。

如建库、建表这一类的数据库定义语句(DDL);其次,由于动态SQL语句允许在执行时才确定到底要执行怎样的SQL语句,因此使用动态SQL语句可以使程序实现参数化设计,具有很大的灵活性和通用性。

一、动态SQL语句的应用分析PB提供了四种格式的动态SQL语句,每种格式都有自己不同的特点和作用。

下面我们对各种格式的具体使用方法分别加以说明。

(一)第一种格式当执行没有输入参数并且没有返回结果集的SQL语句时可以使用这种格式,这种格式使用比较简单,其实现的操作也比较少。

1EXECUTE IMMEDIATE SQLStatement{USING TransactionObject};其中SQLStatement是要执行的SQL语句,可以直接用引号将要执行的SQL引起来用,或者用字符串变量的形式提供SQL语句。

通过使用字符串变量可以在具体执行的时候才指定要执行什么样的SQL语句。

TransactionObject是用户所使用的事务对象,缺省为SQLCA。

2①建立一张数据库表(base),SQL语句的表述用引号引起来直接使用。

EXECUTE IMMEDIATE‘CREATE TABLE base(code char(6),name char(30))’USING SQLCA;②执行对数据库记录的操作,在表base中插入一条记录,SQL语句通过字符串变量传递执行语句。

pb协议原理

pb协议原理

pb协议原理PB(Protocol Buffer)协议原理概述PB(Protocol Buffer)是一种数据交换的编码格式,由Google公司开发。

它以二进制的形式存储和传输数据,具有高效、灵活和可扩展的特点。

本文将介绍PB协议的原理以及其在实际应用中的优势。

一、PB协议的基本原理1. 数据结构定义PB协议使用一种类似于结构体的方式来描述数据结构。

用户需要通过一个`.proto`文件来定义消息类型、字段和数据格式。

每个字段都有一个唯一的标识符和一个特定的数据类型。

2. 数据序列化PB协议将数据序列化为二进制格式进行存储和传输。

数据序列化可以分为编码和解码两个过程。

编码将结构化的数据转化为二进制流,解码则是将二进制流还原为结构化数据。

3. 数据压缩PB协议采用了Varint编码技术,将整数进行压缩存储。

Varint编码将一个整数分割成多个部分进行存储,每个部分的高位用于标识是否还有后续部分,低位则存储数值的具体内容。

这种编码方式可以有效减少存储空间。

4. 优势PB协议具有以下优势:- 数据存储紧凑:PB使用二进制格式存储数据,相比于XML和JSON等文本格式,存储空间占用更小。

- 数据解析高效:PB协议对于数据的序列化和反序列化效率非常高,可以快速地将结构化数据转化为二进制流。

- 数据兼容性强:PB协议支持字段的可选、必选和重复三种类型,可以方便地进行数据扩展和升级。

二、PB协议的应用场景1. 分布式系统通信在分布式系统中,不同节点之间需要进行数据交换和通信。

PB协议可以在不同的编程语言间进行数据传输,保证数据的一致性和准确性。

2. 数据存储和传输PB协议可以用于数据的存储和传输,例如在日志传输、网络通信、数据库存储等场景中,PB协议可以提高数据的传输效率和节省存储空间。

3. 应用接口定义PB协议可以用于定义应用程序之间的接口,确保数据传输的可靠性和一致性。

通过定义接口的消息类型和字段,不同系统之间可以进行数据的无缝对接。

PB开发规范

PB开发规范

pb程序编制规范---开发部制一.命名规范1.1.窗口:W_XX_XXXX(W_系统简写_功能名称)2.例:物品入库处理窗口为WZ_RK2,物品主窗口命名为WZ_MAIN注:1.wz_xx中主窗口继承于W_MAIN_FATHER,MDI窗口一般继承于W_qbase2.系统简写名称参照各产品的子系统设置规范。

3.2.菜单:M_XX_XXXX(W_系统简写_功能名称)例:物品系统主菜单M_MAIN。

4.3.变量3.3变量命名:变量范围+变量类型+‘_’+变量名称例:全局的日期为Gd_today,门诊号参数As_mzhm注:WZ-V1.0公共全局类名:Uo_support::U_supporclass WZ-V1.0全局参数结构名:Base_info::Base_infoWZ-V1.0窗口数据传输变量结构:S_Exchange::S_Exchange5.4.函数公用全局函数:GF_XXXX(GF+_+函数名称)子系统使用的公共函数:GF_XX_XXXX(GF+_+系统简称+_+函数名称)窗口函数:WF_XXXX(WF+_+函数名称)类成员函数:uf_XXXX(函数名称)全局扩展函数:GE_XXXX(GE+_+函数名称)局部扩展函数:LE_XXXX(LE+_+函数名称)6.5.数据窗口下拉式数据窗口:DD_XXXX一般数据窗口:D_XX_XXXX(D+_+系统简写+_+数据窗口名称)7.6.类U_XXXX(非可视类)VU_XXXX(可视类)8.9.8.库(PBL)XX_XXXX:系统简写+_+库名XX_MAIN:主库(主窗口,主菜单及本系统的私有维护) XX_PUBLIC:本系统的公用部份XX_XXXX: 业务功能1XX_XXXX: 业务功能2。

10.9.应用应用名一般与系统的简称同名11.10.表与视图表:XX_XXXX(系统简写+_+表名拼音缩写).例:住院系统的费用库(ZY_FYMX)视图:V_XX_XXXX(V+_+系统简写_+视图名). 例:门诊系统的收费汇总视图(V_MZ_SFHZ)12.11.字段名字段名一般是字段中文名称拼音的首字母缩写,一般为4个字母.如:药品序号(YPXH)13.12.主外键主键:PK_XXXX_XXXX(PK+_+表名+_+列名)外键:FK_XXXX_XXXX(FK+_+表名+_+列名)14.13.索引IDX_XXXX_XXXX(IDX+_+表名+_+索引名)15.14.触发器TR_XXXX_XXXX_XXXX(TR+_+所属表名+_+作用表名+_+触发器名).16.15.存储过程PR_XX_XXXX(PR+_+系统简写+_+存储过程名)二.界面规范1.1.用程序主窗口采用MDI方式,应具有Miscohelp提示。

PB-串行接口

PB-串行接口

PB是一个非常好的数据库管理系统的开发工具。

它能够处理纷繁复杂的数据、提供优异的报表集成方式,并且具有灵活、友好、方便和快捷等特点,非常适用于不同的数据库管理系统。

但是,许多应用程序既包含了复杂的数据处理,又需要进行计算机通信的控制,如门禁系统、点名系统以及接见系统等。

这些应用程序中必须使用计算机的串口进行通信,而PB没有直接控制计算机串口的控件; 而VB中虽然带有串口控件,但是对于习惯使用PB的程序员来说,使用VB来处理大量复杂数据有时会感到不便。

笔者在实际工作中利用OLE调用Mscomm.ocx控件,方便地解决了PB中的通信控制问题。

一、解决方法1.在窗体中新建一OLE控件,在出现的“Insert Object属性”窗口中选择“Insert Control Tab”选项卡,在“Control Type”选项中选择“Microsoft Communications Control”选项(如果没有,说明此机器未注册安装此控件,安装注册的具体方法我们将在下面做详细的介绍),点击“OK”按钮后将控件放在窗体中任一位置(因为控件在实际运行时是不可见的,可以任意放置),系统中出现“Mscomm”控件图标,给此控件命名为“OLE_comm”。

图1 “OLE Custom Control”对话框图2 “Control Properties属性”对话框2.控件的属性设置可以在“OLE Custom Control”对话框中的“OLE Control Properties”按钮中进行设置(如图1所示),您也可以鼠标右击控件菜单的“OCX Properties”选项,进入“Control Properties属性”对话框(如图2所示)。

笔者推荐您最好在程序中使用编码设置,这样更加便于控制。

例如,在窗口OPEN事件中编程。

ole_comm.object._CommPort = 1ole_comm.object.Settings = "57600,n,8,1"ole_comm.object.InputLen = 0ole_comm.object.InBufferSize = 90ole_comm.object.OutBufferSize = 60ole_comm.object.SThreshold = 0ole_comm.object.RThreshold = 9ole_comm.object.Handshaking = 0ole_comm.object.PortOpen = Trueole_comm.object.InBufferCount = 0ole_comm.object.DTREnable = true其中:CommPort 设置并返回通信端口号。

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 类型才能有效地获取返回参数。

pb(powerbuilder)异常及错误

pb(powerbuilder)异常及错误

pb(powerbuilder)异常及错误打开任意⼀个数据窗时,提⽰“sybase powerbuilder已停⽌⼯作”解决⽅法,错误如图所⽰⼀、打开任意⼀个数据窗时,提⽰⼀、解决⽅法1:找到注册表(运⾏:regedit)中HKEY_USERS\S-1-5-21-1060284298-1004336348-839522115-1003\Software\Sybase\PowerBuilder\9.0\Layout\Default,然后删除其中的Datawindow项⽬解决⽅法2:卸载PB 清理注册表,重启电脑,换个路径重新安装。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------⼆、使⽤return 1 处理报错信息:在DataWindow的DBError事件下:写脚本return 1 (如果返回1会触发itemchange事件)Return valueSet the return code to affect the outcome of the event:0 (Default) Reject the data value and show an error message box1 Reject the data value with no message box2 Accept the data value3 Reject the data value but allow focus to changeitemerror事件的返回值0——缺省值,显⽰出错信息,拒绝输⼊值并显⽰有效性检查,出错信息同时不允许移⾛焦点;1——不显⽰出错信息,拒绝输⼊信息,同时不允许移⾛焦点;2——不显⽰出错信息,接收输⼊值;3——不显⽰出错信息,拒绝输⼊信息,允许移⾛焦点;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------三、数据管道 pipelineobject.Start 错误列表Integer. Returns 1 if it succeeds and a negative number if an error occurs.Error values are:-1 Pipe open failed-2 Too many columns-3 Table already exists-4 Table does not exist-5 Missing connection-6 Wrong arguments-7 Column mismatch-8 Fatal SQL error in source-9 Fatal SQL error in destination-10 Maximum number of errors exceeded-12 Bad table syntax-13 Key required but not supplied-15 Pipe already in progress-16 Error in source database-17 Error in destination database-18 Destination database is read-onlyIf any argument's value is NULL, Start returns NULL.String ls_errortextIF IsNull( ai_ErrCode ) THENls_errortext = "传递了空参数!"RETURN ''END IFCHOOSE CASE ai_ErrCodeCASE - 1ls_errortext = "数据管道打开错误!请检查所有的对象是否有效.错误代码:" + String( ai_ErrCode )CASE - 2ls_errortext = "列数超过上限!错误代码:" + String( ai_ErrCode )CASE - 3ls_errortext = "⽬的表已存在!错误代码:" + String( ai_ErrCode )CASE - 4ls_errortext = "⽬的表不存在!错误代码:" + String( ai_ErrCode )CASE - 5 //common start()函数与repair()函数公⽤错误代码ls_errortext = "连接被断开!错误代码:" + String( ai_ErrCode )CASE - 6ls_errortext = "错误参数!"CASE - 7ls_errortext = "列类型不匹配!错误代码:" + String( ai_ErrCode )CASE - 8ls_errortext = "源SQL语法错误!错误代码:" + String( ai_ErrCode )CASE - 9 //commonls_errortext = "⽬的SQL语法错误!错误代码:" + String( ai_ErrCode )CASE - 10 //commonls_errortext = "发⽣错误个数超过最⼤界定错误数!错误代码:" + String( ai_ErrCode )CASE - 11 //repair专⽤错误代码ls_errortext = "⽆效的窗⼝句柄!错误代码:" + String( ai_ErrCode )CASE - 12 //commonls_errortext = "错误的表语法!错误代码:" + String( ai_ErrCode )CASE - 13ls_errortext = "空的主键值!错误代码:" + String( ai_ErrCode )CASE - 15 //commonls_errortext = "该数据管道已打开!错误代码:" + String( ai_ErrCode )CASE - 16ls_errortext = "错误发⽣在源数据库!错误代码:" + String( ai_ErrCode )CASE - 17 //commonls_errortext = "错误发⽣在⽬的数据库!错误代码:" + String( ai_ErrCode )CASE - 18 //commonls_errortext = "⽬标数据库只读!错误代码:" + String( ai_ErrCode )END CHOOSERETURN ls_errortext-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------四、Database transaction information not available.Call SetTras or SetTransObject function1、dw控件没有加settransobject。

基于PB的窗口间参数传递

基于PB的窗口间参数传递

二 、 口间实现参数传递的基本原理及 实现过程 窗
在 窗 口 间 实 现 参 数 传 递 是 使 用 P 提供 的 预 定 义 对 象 Me— B s sg 现 的 。 Mesg 对 象 有 9个 属 性 , 前 4个 与 Wi o s ae实 sa n w 消 d 息 结 构 的前 4个 一 致 ,下 面是 Mes e对 象 的属 性 描 述 : s g a
类 :传 人参 数 和传 出参 数 。所谓 传人 参数 是将 传 人参 数被 打
开 的 窗 口 ,传 出 参 数 是 指 将 参 数 从 被 打 开 的 窗 口传 回 调 用 程
受到 了国内外广大用 户的青 睐 。
在用 P B编 写 应 用 程 序 时 ,经 常 需 要 在 窗 口 和 窗 口之 间 进 行 参 数 的 传 递 , 即 在 打 开 或 关 闭 一 个 窗 口时 可 以将 某 个 传 人 参 数 和 传 出 ,然 后 根 据 参 数 值 来 做 出 相 应 的 处 理 。 根 据 传 递 . 参 数 的 方 向 可 以 分 为 传 人 参 数 和 传 出 参 数 两 种 情 况 ,在 每 一 种 情 况 下 根 据 所 传 递 参 数 的 个 数 又 可 分 为 二 种 类 型 :传 递 一
出参 数 的 过 程 。 三个 常用函数 的功能简述如 下 : 1 pn tp — — 打 开 一 个 窗 口 ,使 其 所 有 的 属 性 、 .0 e wi 栅 h 控 件 都 可 被 脚 本 获 取 , 同 时 根 据 参 数 的 类 型 将 参 数 存 放 到 系 统 的 Mesg 象 的相 应 属 性 里 面 。其 函 数 语 法 如 下 : s e对 a
Coe tR tm 函 数 时 , 就 会 检 查 传 递 的参 数 ,如 果 传 递 的 是 l Wi eu s h

PB串口通信技术

PB串口通信技术

PowerBuilder中串行通信编程技术研究(1)摘要:介绍了在PowerBuilder 中调用Win32 API函数、使用Mscomm32.ocx通信控件、利用VCL通信组件和调用DLL(动态链接库)中的函数来实现串行通信的方法,分析总结了各种方法的优缺点。

关键词:串行通信;事件驱动;应用程序接口;动态链接库引言在自动控制中,用PC机对工程实现实时监控,通常要求PC机能在用户界面上具有数据采集、数据处理以及控制信号的产生与传输等功能。

在这种情况下,PC机要与过程控制的信号相联系,就要求能实现对PC机的串行端口直接操作。

串行通信具有传输距离长、连接简单、使用灵活方便、数据传输可靠性高等特点,在工业监控、数据采集和实时控制系统中得到了广泛应用。

PowerBuilder(简称PB)是一种可视化的、面向对象的快速交互式应用开发工具。

PB 以其简洁高效的集成开发环境、强大的数据窗口技术、便捷的报表生成及打印功能,越来越受到广大开发人员的青睐。

在各种开发软件中,PB对于数据库的上层编程支持是名列前茅的,但是,PB对计算机的底层支持略显薄弱,没有提供串行通信的命令、函数或控件,与其它设备之间进行数据通信较为困难,笔者根据自己在PB编程中积累的经验,介绍了几种在PB中实现串行通信的方法。

1 串行数据通信1.1 工作原理Windows是一个事件驱动的与设备无关的多用户操作系统,它禁止应用程序直接和硬件交互,程序员只能通过Windows提供的各类驱动程序来管理硬件。

Windows系统函数包含了通信支持中断功能,Windows系统为每个通信设备开辟了用户定义的输入输出缓冲区(即读写缓冲区),数据进出通信口均由系统后台来完成。

应用程序只需完成对输入输出缓冲区操作就可以了。

实际过程是每接收一个数据就产生一个低级硬件中断,Windows系统中的串行驱动程序就取得了控制权,并将接收到的数据放入输入数据缓冲区,然后将控制权返还正在运行的应用程序。

PB函数解析

PB函数解析

PB函数大全(查找方便)Abs()功能计算绝对值。

语法Abs ( n )参数n:要得到绝对值的数值型变量或表达式返回值返回值的数据类型与n的数据类型相同,函数执行成功时返回n的绝对值。

如果参数n的值为NULL,Abs()函数返回NULL。

Asc()功能得到字符串第一个字符的ASCII码整数值。

语法Asc ( string )参数string:要得到第一个字符ASCII值的字符串返回值Integer。

函数执行成功时返回string参数第一个字符的ASCII值,如果string参数的值为NULL,则Asc()函数返回NULL。

Beep()功能响铃n次(n超过10时只响10次)。

语法Beep ( n )参数n:数值类型,指定需要的响铃次数。

如果n的值大于10,那么计算机只响铃10次返回值Integer。

函数执行成功时返回1,发生错误时返回-1。

如果参数n的值为NULL,Beep()函数返回NULL。

Blob()Blob()功能将字符串转换成Blob类型数据。

语法Blob ( text )参数text:string类型,指定要转换的数据返回值Blob。

函数执行成功时返回转换后的Blob类型数据;如果text参数的值为NULL,则Blob()函数返回NULL。

BlobEdit()功能将任意类型的数据插入到Blob类型变量的指定位置。

语法BlobEdit ( blobvariable, n, data )参数blobvariable:Blob类型的已初始化变量,将向该变量中插入数据n:指定插入位置,有效值在1到4,294,967,295之间data:要插入到Blob类型变量中的数据,其数据类型可以是任何有效的PowerBuilder数据类型返回值Unsigned long。

函数执行成功时返回下次可以插入数据的位置;如果blobvariable变量中空间不够或任何参数的值为NULL,则BlobEdit()函数返回NULL。

pb函数库之字符串操作函数

pb函数库之字符串操作函数
语法Replace ( string1, start, n, string2 )
参数string1:string类型,指定要使用string2替换其中一部分内容的字符串start:long类型,指定要从哪个字符位置开始替换字符串,字符串中第一个字符的位置为1n:long类型,指定要替换多少个字符string2:string类型,指定用哪个字符串替换string1的部分字符返回值String。函数执行成功时返回替换后的字符串,发生错误时返回空字符串("")。如果任何参数的值为NULL,Replace()函数返回NULL。用法如果start参数指定的位置超过了string1的长度,那么Replace()函数把将string2拼接到string1的后面形成的字符串返回。如果n的值为0,那么Replace()函数把string2插入到string1指定位置后形成的字符串返回。
--------------------------------------------------------------------------------
Lower()
功能将字符串中的大写字母转换为小写字母。
语法Lower ( string )
参数string:要将其中的大写字母转换为小写字母的字符串返回值String。函数执行成功时返回将大写字母转换为小写字母后的字符串,发生错误时返回空字符串("")。如果string参数的值为NULL,Lower()函数返回NULL。
$指示字符串的结束,例如,red$表示所有以red结束的字符串均与该模式匹配,而redo与模式red$不匹配。
.匹配任意单个字符,例如,^&&$匹配任何六个字符组成的字符串。

PB编程规范(v4.0)

PB编程规范(v4.0)

密级公开()普通(√)秘密()机密()绝密()PB编程规范文档编号:<文档编号(按照文档编码规范)>文档归类:项目规范文档作者:李程扬创建时间:2002-07-02修改时间:2005-09-29版本号:v3.0(2002-07-31)、v4.0(2005-09-29)文档传阅:ZHIS4项目组成员为提高程序开发效率,降低软件开发过程中出现错误的几率,使系统模块保持一致的风格,在开发过程中应该遵循一定的编程标准。

规范提供的是定义一个源码级应用程序的开发规范,它是借助PowerScript语言,在PowerBuilder开发环境下提供的标准化服务。

它可供应开发人员及系统设计人员使用。

本规范描述开发人员关心的外部特性及设施,而不是描述为达到这些功能采用的内部结构技术。

1、命名规范:1.1 命名总则:1.1.1 除了特殊说明外,所有命名均须使用规定的前缀标识,即“标识_功能说明”;1.1.2 所有命名的功能说明部分均为用下划线(_)分隔单词;1.1.3 “功能说明”部分的单词先后顺序以尽量使同一类别的对象排列在一起为原则,以便于查找定位;1.1.4 绝对禁止用单纯的数字或汉语拼音简码来命名,如ls_1、ls_brxm(病人姓名),必须使用与具体功能相关的单词或单词缩写,且尽可能使用行业常用术语或约定词汇,即词能达意、沟通方便;1.1.5 命名的原则是尽量能从名称上看出更多的隐含基本信息,如变量的作用域、变量类型等;1.2 对象命名规范:注意事项✌.对象命名:对象类型标识_功能说明,当然应用对象命名无须前缀标识;✌.对于窗口与数据窗口的命名,推荐采用“标识_子类别_名词_动词_备注”命名方式,这样可以把同类对象排在一起,编程时便于查找,应用框架也较为明晰;例如:w_employee_edit_gridw_employee_edit_freed_dept_previewd_dept_configd_query_apply_sheetd_query_lay_physicd_rpt_staff_print_freed_rpt_staff_print_grid由上,对于数据窗口子类别命名可遵循:打印(print)、查询(query)、报表(rpt) ✌.对于有继承关系对象的命名(窗口、菜单、用户对象),推荐用“父类_子类说明”;例如:w_spellw_spell_applyw_spell_apply_sicku_dwbuttonu_dwbutton_add1.3 变量命名规范:1.3.1 变量作用域前缀:注意事项✌.编程时对于全局变量、共享变量与实例变量能不使用时尽量不用,如可以用参数传值时就不要定义实例变量;1.3.2 变量类型前缀:注意事项✌.字符串类型统一用String,而不准使用Char类型;✌.日期类型推荐以“_date”作为后缀,时间类型以“_time”作后缀,✌.整型定义推荐都使用Long,因为Integer短整型最大值为32767,某些情况下可能会溢出;另外无符号长整型(UnsignedLong)与短整型(UnsignedInteger)的前缀与有符号类型一样;✌.浮点类型统一使用Decimal,不用Double或Real类型;Decimal在定义变量时须指定精度,即使是无小数位的情况下;若是存数据库列值的变量一定要注意与列的小数精度一致,这一点切记;例如:Dec{3} ldc_pres_costDec{0} ldc_nullah_numberDec{2} ldc_lay_physic_quantityDec{2} ldc_physic_pack_spec✌.对于存数据库数值类型列的变量一定要注意其是否有小数及其位数,另外,一定要使用Decimal类型变量,绝对不准使用Long类型,即使当前值它位数足够,但你不能保证将来变动时Long类型变量位数也足够存其值!✌.对于其它没列出的对象类型,取其单词首字母为前缀;例如:TranceObject lto_connect1.3.3 变量访问范围:注意事项✌.所有共享变量或实例变量都必须设置访问范围(Public、Protected、Private),不推荐使用Public类型,而用of_get_xxx与/或of_set_xxx向外提供封装接口;✌.在对象内使用全局变量时,尽可能在使用前把它赋值给同类型的实例变量,以使模块移植性更好(方便),例如,对象Constructor事件或窗口Open事件中:IS_LOGIN_DEPT_CODE = GS_LOGIN_DEPT_CODE1.3.4 变量名称:注意事项✌.对于从数据库或数据窗口中取值的变量,其后部分尽量用数据库字段名;例如:String ls_item_nameDec{3} ldc_total_dosage1.4 控件命名规范:注意事项✌.控件命名:“控件类型前缀_功能说明”,界面设计时其[作用范围]不用标示,如树形控件tv_physic;但在脚本中定义时必须遵循《变量命名规范》,如数据窗口控件:idw_send;✌.界面设计时不能使用控件的缺省名称(如cb_1,dw_2),须用与控件功能相关的单词,单词间用下划线(_)相隔;当然一些图示控件(如GroupBox,Line)可以除外;一般界面有多个相同类型控件或控件名要在代码中引用时就要改变其缺省定义。

pb常用函数(一)(转)

pb常用函数(一)(转)

pb常⽤函数(⼀)(转)Abs()功能计算绝对值。

语法Abs ( n )参数n:要得到绝对值的数值型变量或表达式返回值返回值的数据类型与n的数据类型相同,函数执⾏成功时返回n的绝对值。

如果参数n的值为NULL,Abs()函数返回NULL。

Ceiling()功能返回⼤于n的最⼩整数。

语法Ceiling ( n )参数n:数值型变量或表达式返回值返回值的数据类型与n的数据类型相同。

函数执⾏成功时返回⼤于n的最⼩整数。

如果参数n的值为NULL,Ceiling()函数返回NULL。

Cos()功能计算余弦,其中参数以弧度为单位。

语法Cos ( n )参数n:数值型变量或表达式返回值Double。

函数执⾏成功时返回n的余弦。

如果参数n的值为NULL,Cos()函数返回NULL。

Exp()功能计算e的n次⽅。

语法Exp ( n )参数n:指定幂值返回值Double。

函数执⾏成功时返回e(约等于2.71828)的n次⽅。

如果参数n的值为NULL,Exp()函数返回NULL。

Fact()功能计算n的阶乘。

语法Fact ( n )参数n:数值型变量或表达式返回值Double。

函数执⾏成功时返回n的阶乘。

如果参数n的值为NULL,Fact()函数返回NULL。

Int()功能得到⼩于等于n的最⼤整数。

语法Int ( n )参数n:数值型变量或表达式返回值Integer。

函数执⾏成功时返回⼩于等于n的最⼤整数。

如果n的值太⼩或太⼤,超过了整数的表⽰范围,则函数返回0。

如果参数n的值为NULL,Int()函数返回NULL。

Log()功能计算n的⾃然对数。

语法Log ( n )参数n:数值型变量或表达式,其值必须⼤于0返回值Double。

函数执⾏成功时返回n的⾃然对数。

如果n⼩于等于0,将导致运⾏错误。

如果参数n的值为NULL,Log()函数返回NULL。

LogTen()功能计算n的常⽤对数(以10为底)。

语法LogTen ( n )参数n:数值型变量或表达式,其值必须⼤于0返回值Double。

pb多线程

pb多线程

SharedObject系列函数和共享对象有关的函数包括:SharedObjectRegister、SharedObjectGet、SharedObjectUnregister和SharedObjectDirectory函数。

首先,用SharedObjectRegister函数初始化共享对象,并建立一个单独的线程。

如:SharedObjectRegister (“ccuo_thread” ,“thread1” )其中ccuo_thread是一个共享的自定义类用户对象的类名,thread1是共享对象实例的共享名。

如果SharedObjectRegister函数返回Success,则新线程创建成功。

然后,执行指定代码。

有两种方法让新线程执行指定的代码:一种是在自定义类用户对象的constructor事件中编写脚本,新线程创建后就会自动执行该事件脚本;另一种方法是使用SharedObjectGet函数。

该函数实现共享对象实例的引用,如:SharedObjectGet ( “thread1” ,inv_thread )其中inv_thread是用来存储共享对象实例的一个对象变量,要求与ccuo_thread具有同一个类名。

最后,通过使用Post语句,即以inv_thread.Post of_function(agrs)的形式,异步调用共享对象的函数of_function。

在完成任务后,可以用SharedObjectUnregister函数中止线程,也可用SharedObjectDirectory函数列出所有有效的共享对象。

函数调用部分本文所用Win32 API函数原型为:Function Ulong FindWindowA ( String lpClassName ,String lpWindowName ) Library “user32.dll”Function Ulong GetTickCount ( ) Library “kernel32.dll”Function Ulong GetDesktopWindow ( ) Library “user32.dll”Function Boolean GetWindowRect ( Ulong hWnd ,ref stc_rect lpRect ) Library “user32.dll” Function Boolean MoveWindow ( Ulong hWnd ,int X ,int Y ,int nWidth ,int nHeight ,Boolean bRepaint ) Library “user32.dll”下面具体讨论如何实现消息对话框的居中显示://声明对象变量ccuo_thread lccuo_thread//创建新线程SharedObjectRegister (…ccuo_thread‟ ,…thread_center‟ )//引用实例SharedObjectGet (…thread_center‟ ,lccuo_thread )//调用窗口居中函数lccuo_thread.Post of_center (…#32770‟ ,…Demostration‟ ,2000 )//创建消息对话框MessageBox ( …Demostration‟ ,…Copyright(c) 2001 by Y.L.Sun‟ )//中止线程SharedObjectunRegister ( …thread_center‟ )函数实现部分实现窗口居中显示的函数是自定义类用户对象ccuo_thread的对象函数of_center,其实现代码如下:ccuo_thread.of_center ( String lpclassname ,Stringlpwindowname , Ulong dwtimeout ) return Boolean//lpclassname:消息对话框的类名(#32770)//lpwindowname:消息对话框的标题//dwtimeout:超时计数Ulong lul_hwnd //存放消息对话框的句柄Ulong lul_start //计时开始时刻的值lul_start = GetTickCount ( ) //计时开始do//查找顶层窗口lul_hwnd=FindWindowA ( lpclassname ,lpwindowname )//找到顶层窗口后,跳出循环if lul_hwnd <> 0 then exit//判断是否已超时loop while GetTickCount( )-lul_start< dwtimeout//没有找到消息对话框if lul_hwnd = 0 thenreturn falseelse//对话框居中return of_center ( 0 ,lul_hwnd )end ifof_center的重载函数代码如下:ccuo_thread.of_center ( Ulong hwndp ,Ulong hwndc ) return Boolean//hwndp:父窗口的句柄,值为0时认为是桌面//hwndc:子窗口的句柄int li_x //窗口的X坐标int li_y //窗口的Y坐标stc_rect lstc_parent //父窗口的4边坐标stc_rect lstc_child //子窗口的4边坐标//值为0时认为是桌面if hwndp = 0 then hwndparent =GetDesktopWindow ( )//获得窗口的4边坐标if not GetWindowRect ( hwndcurrent ,lstc_child ) then return falseif not GetWindowRect ( hwndparent ,lstc_parent ) then return falseli_x = (( lstc_parent.right -lstc_parent.left ) -( lstc_child.right -lstc_child.left )) /2li_y = (( lstc_parent.bottom -lstc_parent.top ) -( lstc_child.bottom -lstc_child.top )) /2//计算子窗口的X、Y坐标if li_x < 0 or li_y < 0 then return false//移动子窗口if not MoveWindow ( hwndcurrent ,li_x ,li_y ,lstc_child.right -lstc_child.left ,lstc_child.bottom -lstc_child.top ,false ) then return falsereturn true本文代码在PB 7.0下通过。

pb 结构变量的使用

pb 结构变量的使用

pb 结构变量的使用以PB结构变量的使用为标题,本文将详细介绍PB结构变量的定义、声明、赋值和使用方法,以及其在实际编程中的应用。

一、PB结构变量的定义和声明PB(PowerBuilder)是一种面向对象的编程语言,它支持结构化编程和面向对象编程的特性。

PB结构变量是一种用来存储多个相关数据元素的数据类型,它可以包含多个不同类型的成员变量,这些成员变量可以是基本数据类型,也可以是其他结构变量。

在PB中,我们可以通过自定义结构变量来组织和管理复杂的数据结构。

在PB中,声明结构变量的语法格式为:structure_name variable_name例如,我们可以定义一个名为student的结构变量,其中包含姓名(name)、年龄(age)和成绩(score)三个成员变量:student s二、PB结构变量的赋值和使用PB结构变量的赋值方式与其他变量相同,可以通过赋值语句将值赋给结构变量的成员变量。

例如,我们可以通过以下赋值语句给student结构变量的成员变量赋值: = "张三"s.age = 18s.score = 90.5在PB中,我们可以通过结构变量的成员变量名来访问和修改成员变量的值。

例如,我们可以通过以下语句输出学生的姓名和成绩:MessageBox("学生姓名:" + + ",成绩:" + String(s.score))三、PB结构变量的应用场景PB结构变量在实际编程中具有广泛的应用场景,特别适用于需要组织和管理复杂数据结构的程序。

以下是PB结构变量常见的应用场景之一:1. 学生信息管理系统在学生信息管理系统中,我们通常需要存储每个学生的姓名、年龄、性别、联系方式等信息。

通过定义一个名为student的结构变量,我们可以将这些信息整合在一起,方便地进行存储和管理。

例如,我们可以定义一个名为students的结构变量数组,每个元素都是一个student结构变量,其中包含学生的各项信息。

PB 编码规范

PB 编码规范

PB 编码规范。

原来在聚赫的时候写的这是2010年写的一个规范给公司内部使用的。

PB毕竟是一个老语言了,命名规范和java,c# 差别很大其实代码规范见仁见智吧,良好的书写规范对自己没坏处的,当然对公司也大大的有好处,毕竟谁看到写的乱糟糟的代码心里都不爽。

但是真正能按照规范写代码的人毕竟不是太多,特别特别是代码的注释,更特别特别的是修改注释。

在看到蛋疼代码有蛋碎感的同时,还有一种想爆粗口的念头,想想别人看到咱们的代码会不会也有同样的感觉,所以大家尽量书写规范的代码,共勉。

变量命名规范(这样命名的变量很容易看明白这是实例,全局还是局部,已经变量的类型,变量的意义为修改代码带来方便)变量作用域+ 变量类型+ _ + 变量意义说明串一、变量作用域全局变量g_共享变量s_ //不推荐使用,共享变量不依赖于对象的实例存在实例变量i_局部变量l_注意:四种作用域前缀字母都为小写二、变量类型(以局部变量为例)数据类型类型声明前缀整形Integer li_字符型String ls_日期Date ld_日期时间DateTime ldt布尔Boolean lb_浮点Decimal ldec_Double Double ldou_注意:以上是主要的数据类型,前缀都是小写三、变量意义说明串变量说明字符串可以有2中写法1.推荐使用英文字符串做说明串,每个单词的首字母都要大写,如:ls_CheckedDate2.在英文不好表达时,可以使用中文全拼代替,前两个中文汉字使用全拼,首字母大写,后面汉字使用全拼的首字母,都要大写如:lb_DianJiLBTPX 点击列标题排序可能有人会说用拼音不好,要用英文。

相对于用词霸翻译过来的英文我更只是用中文拼音。

其实pb也支持直接用中文,呵呵四、变量声明1.变量类型使用全称,如:整类使用Integer 而不是Int2.变量类型首字母大写,其余字母全小写如:String3.变量声明尽量不要在一行中声明太多变量,分行处理,在变量不多时可以每行声明一个变量4.变量名称要具有一定的实际意义,做到见其名知其意,在比较难理解时在变量后面添加必要的注释文字程序注释[可以使用pbhelper来辅助完成]程序注释可分3种注释1.函数、事件的说明注释。

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

PB程序间传递字符串变量
我们知道可以用Send ( handle, message#, lowword, long )函数完成不同程序窗口间的消息传递,其中最后两个参数为long型,因此可以利用这两个参数来传递数字型的变量。

如果想传递的是字符串呢?由于每个进程都有自己独立的内存地址和内存空间,因此不可能直接通过访问变量地址的方法得到变量。

下面给出pb的方法:
source程序:
外部函数:
Function ulong GetCurrentProcessId() LIBRARY "kernel32.dll"
Function integer SndMsg(long hWnd, long uMsg, long url, &
ref blob info) library "user32.dll" Alias For "SendMessageA
constant long PBM_CUSTOM01 = 1024
程序:
IF il_hTarget <= 0 THEN findTarget() //找接受变量的窗口,主要用findwindow实现
IF il_hTarget > 0 THEN
String ls_len
//组成一个要发送的字符串
url+= " "+info+" "+String(srctype)+" "+String(offlinetype)
//计算整个要发送字符的长度,并转化为长度为10的字符串
ls_len = String(Len(url))
IF Len(ls_len) < 10 THEN
ls_len = Space(10 - Len(ls_len))+ls_len
END IF
//转化为blob并发送
Blob lb_snd
lb_snd = Blob(ls_len+url)
SndMsg(il_hTarget, PBM_CUSTOM01 +9,getcurrentprocessID(),lb_snd)
END IF
target程序:
外部函数:
Function ulong OpenProcess(ulong dwDesiredAccess,ulong bInheritHandle,ulong dwProcessId) LIBRARY "kernel32.dll"
Function ulong ReadProcessMemoryStr(ulong hProcess,long lpBaseAddress,ref string lpBuffer,ulong nSize,ref long lpNumberOfBytesWritten) LIBRARY "kernel32.dll" Alias for "ReadProcessMemory"
Function ulong ReadProcessMemoryBlob(ulong hProcess,long lpBaseAddress,ref blob lpBuffer,ulong nSize,ref long lpNumberOfBytesWritten) LIBRARY "kernel32.dll" Alias for "ReadProcessMemory"
事件pbm_custom10:
If (wparam = 0) Or (lparam = 0) THEN RETURN
Long ll_null
SetNull(ll_null)
Long processhnd
CONSTANT Long PROCESS_VM_READ = 16
processhnd = openprocess(PROCESS_VM_READ,0,wparam);
//读取发送进程的内存数据
String ls_size
Long ll_size
ls_size = Space(10) //数据的大小
ReadProcessMemoryStr(processhnd,lparam,ls_size,10,ll_null)
ll_size = Long(Trim(ls_size))
Blob lb_data
lb_data = Blob(String(Space(ll_size)))
ReadProcessMemoryBlob(processhnd,lparam+10,lb_data,ll_size,ll_null)
string ls_data
ls_data = String(lb_data)。

相关文档
最新文档