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
以上两种方法比较而言,第一种方法虽然比较简单实用,但是如果遇上较复杂的数据时,便不能在一个结构数据中充分描述了;
第二种方法不但方便灵活,而且可以传送复杂的数据。当然,参数的传送不止以上的几种方法,你也可以使用全局变量或是公共可
  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)。

相关文档
最新文档