文档库 最新最全的文档下载
当前位置:文档库 › PB介绍

PB介绍

PB介绍
PB介绍

2

3 4 5 6 7 8 9 option java_package = "com.example.tutorial";//生成文件的包名option java_outer_classname = "AddressBookProtos";//类名

message Person { //要描述的结构化数据

required string name = 1;//required表示这个字段不能为空 required int32 id = 2;//等号后面的内容为数字别名

10

11

12

13

14

15

16

17

18

19

20

21

22 optional string email = 3;//optional表示可以为空

PhoneNumber {//内部message

required string number = 1;

optional int32 type = 2;

}

repeated PhoneNumber phone = 4

}

message AddressBook {

repeated Person person = 1;//是个集合

}

对以上内容的一点解释:

?PB所支持的元类型数据请参考:PB元类型数据

?修饰符required:这个修饰符应该谨慎使用,滥用会导致后续的修改容易出现兼容性问题;

?修饰符optional:对于常出现的属性,为节省空间应该取1-16的别名;

?PB是以key-value的形式来将结构化数据序列化的。它采用了将等号后的数字别名以及属性的类型用varints编码成一个数字,来作为key。

2.1.2 使用PB编译器

输入:protoc -I=$SRC_DIR –java_out=$DST_DIR $SRC_DIR/addressbook.proto

其中-I指定.proto文件所在目录

–java_out指定生成java文件所在的目录

2.1.3 使用PB的API来写入和读取messages

经过以上步骤,会在指定的$DST_DIR目录下生成一个AddressBookProtos.java的类。在maven中引入protobuf-java 这个依赖后,利用这个类,便能序列化/反序列化数据了。

生成的代码结构如下:

1 2 3 4 5 6 7 class AddressBookProtos{

class Person{

class PhoneNumber{class Builder{} } class Builder{}

}

class AddressBook{class Builder{} }

}

可以看到Person、PhoneNumber、AddressBook这些内部类则对应了所定义的那些message。

2.2 序列化数据及分析

通过阅读代码可以看到,以上三个类的成员变量都是private类型的,并且,只提供了getter方法,而没有提供setter 方法去为数据变量赋值。

PB利用了内部类可以访问到外部类中私有成员变量的特性。对外部类的任何赋值操作都需要通过Builder内部类来进行。Builder中有一个指向外部类的引用(名为result),当赋值完成,调用Builder的build()方法时,会把这个对象返回,同时使result指向null。

PB通过这样一种方式保证了数据安全性,一旦数据构建完毕,将无法再对其进行修改。

拿PhoneNumber这个类来说,对成员变量number、type赋值,需要以如下方式来进行:

1 2 3 4 5 6 7 PhoneNumber.Builder builder = PhoneNumber.newBuilder();

//调用setter赋值,setter返回了this,所以可以链式表述builder.setNumber("111").setType(1);

//赋值完成后,调用Builder的build方法,将返回PhoneNumber对象PhoneNumber phoneNumber = builder.build();

构建完成后,可以调用writeTo方法,将数据写入数据流中。

2.3 反序列化及分析

一行代码便能完成反序列化:

1 AddressBook list = AddressBook .parseFrom(inputStream或buffer); 背后PB做了很多事情:

1. 根据inputStream或者buffer去构造一个CodedInputStream;

2. 然后使用生成代码中的mergeFrom方法,去解析二进制数据:

首先调用CodedInputStream的readTag,也就是从中取得key值(int类型),然后通过swtich块来往对象中赋值(PB采用了Base 128 Varints的方式来编码这个数字,后面会介绍这种方式的)。

3. 将数据解析完成后,会调用build()方法,将构建好的对象返回。

3 message的编码特点

PB之所以解析速度快、所占体积小,很大程度上是由它序列化的编码特点来决定的。

3.1 Base 128 Varints

PB采用了Base 128 Varints来变长编码整数:

1. 变长编码的整数,它可能包含多个byte,对于每个byte的8位,其中后7位表示数值,最高的一位表示是否还有

还有另一个byte,0表示没有,1表示有;

2. 越前面的byte表示数值的低位,越后面的byte表示数值的高位;

例子:

300 varints 编码为:1010 1100 0000 0010

解释如下:

300的2进制编码为:0001 0010 1100

按照刚才的规则,高低位颠倒,截取最后的7为放在第一个byte,则第一byte为1010 1100(其中最高位1表示,后续还有byte);接着剩下的内容放到第二个byte,为0000 0010(其中最高位0表示,后续无byte,这个数到这里截止了)。

于是,合在一起为1010 1100 0000 0010;

3.2 Key-Value

如前所述,PB的message是一系列的key-value对,在二进制数据中,使用varints数字(包含了别名以及属性类型信息)来作为key,进而通过由PB编译器生成的代码来构造以及解析数据。

PB将key编码成下面的结构:

X YYYY ZZZ

其中:最高位X表示是否还有后续的byte来编码数字别名;YYYY用于编码别名,定义了多余16个属性,则需要用到

官方文档中,有提到PB提供了RPC的接口,但是没有提供具体实现。当在的.proto文件中,加入如下定义:

1 2 3 service XXX {

rpc MMM(request) returns(response); }

PB便会为你生成一个代表这个服务的XXX虚类,通过实现这个类中的abstract MMM方法,以及提供RpcChannel的实现,你便可以利用Protocol Buffers实现你的RPC了。

第三方的RPC实现大家可以参考ThirdPartyRPC

在这里,我利用了第三方实现protobuf-socket-rpc,写了一个小例子,有兴趣的可以看看。如下:Protocol buffer的rpc 例子

5 小结

PB具有跨平台、解析速度快、序列化数据体积小、扩展性高、使用简单的特点。但是我们也可以看到,相比于XML,PB的数据,并不是自然可读的;同时它生成的代码不是纯pojo,对于代码有一定的侵入性。在你的项目中,如果对于以上缺点要求并不高,可以尝试着使用PB。

pb数据窗口常用代码

一、连接数据库 连接数据库也就是指定事务对象。PowerBuilder提供了两个函数:SetTrans()和SetTransObject()。 语法格式: dw_control.SetTrans(TransactionObject) dw_control.SetTransObject(TransactionObject) 其中,dw_control是所使用的数据窗口控件,transactionObject是所要指定的事务对象。 这两个函数有一个重要的区别就是在使用SetTrans()函数时,用户不需做任何数据初始化或事务对象初始化工作。用户只需要在这里填充一个事务对象,PB 就会自动完成对该事物对象的初始化以及和数据库连接的工作。而使用SetTransObject()函数时,用户必须首先把所用的事务对象连接到数据库上。但是,这并不意味着SetTrans()函数比SetTransObject()函数更好,使用SetTrans()函数时,每调用一次函数必须连接一次数据库,因为这个函数在每个事务处理的末端都会执行Disconnect语句。与此相反,使用SetTransObject()函数可以为数据库维持一个开放性的连接。因此在一般情况下,为了提高效率,总是采用SetTransObject()函数。 这两个函数都是成功时返回1,发生错误时返回-1。 二、检索数据 用于检索数据的函数只有一个,就是Retrieve()函数。 语法格式: dw_control.Retrieve() 如果数据窗口控件上的数据窗口对象是有检索参数的,就要在这个函数调用时加上检索参数。而且检索参数必须和数据窗口对象中定义顺序一致。 此函数返回一个长整型的数据,代表检索出来的数据行数。如果发生错误,将返回-1。 三、更新数据 当用户对数据窗口对象内的数据修改后,想把这些修改反映到数据库中去时,必须使用Update()函数。 语法格式: dw_control.Update() 这个更新可能成功,也可能失败。一般在这个函数被调用之后,总是要做一个检查。请看下面的例子: Int li_return

数据结构实验指导书(2016.03.11)

《数据结构》实验指导书 郑州轻工业学院 2016.02.20

目录 前言 (3) 实验01 顺序表的基本操作 (7) 实验02 单链表的基本操作 (19) 实验03 栈的基本操作 (32) 实验04 队列的基本操作 (35) 实验05 二叉树的基本操作 (38) 实验06 哈夫曼编码 (40) 实验07 图的两种存储和遍历 (42) 实验08 最小生成树、拓扑排序和最短路径 (46) 实验09 二叉排序树的基本操作 (48) 实验10 哈希表的生成 (50) 实验11 常用的内部排序算法 (52) 附:实验报告模板 .......... 错误!未定义书签。

前言 《数据结构》是计算机相关专业的一门核心基础课程,是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础,也是很多高校考研专业课之一。它主要介绍线性结构、树型结构、图状结构三种逻辑结构的特点和在计算机内的存储方法,并在此基础上介绍一些典型算法及其时、空效率分析。这门课程的主要任务是研究数据的逻辑关系以及这种逻辑关系在计算机中的表示、存储和运算,培养学生能够设计有效表达和简化算法的数据结构,从而提高其程序设计能力。通过学习,要求学生能够掌握各种数据结构的特点、存储表示和典型算法的设计思想及程序实现,能够根据实际问题选取合适的数据表达和存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。另外本课程的学习过程也是进行复杂程序设计的训练过程,通过算法设计和上机实践的训练,能够培养学生的数据抽象能力和程序设计能力。学习这门课程,习题和实验是两个关键环节。学生理解算法,上机实验是最佳的途径之一。因此,实验环节的好坏是学生能否学好《数据结构》的关键。为了更好地配合学生实验,特编写实验指导书。 一、实验目的 本课程实验主要是为了原理和应用的结合,通过实验一方面使学生更好的理解数据结构的概念

数据结构课后习题

第一章 3.(1)A(2)C(3)D 5.计算下列程序中x=x+1的语句频度 for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) x=x+1; 【解答】x=x+1的语句频度为: T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/6 6.编写算法,求一元多项式p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。算法的输入和输出采用下列方法 (1)通过参数表中的参数显式传递 (2)通过全局变量隐式传递。讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。 【解答】 (1)通过参数表中的参数显式传递 优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。 缺点:形参须与实参对应,且返回值数量有限。 (2)通过全局变量隐式传递 优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗 缺点:函数通用性降低,移植性差 算法如下:通过全局变量隐式传递参数 PolyValue() { int i,n; float x,a[],p; printf(“\nn=”); scanf(“%f”,&n); printf(“\nx=”); scanf(“%f”,&x); for(i=0;i

pb中数据窗口函数总结

pb中数据窗口函数总结 一、连接数据库 连接数据库也就是指定事务对象。PowerBuilder提供了两个函数:SetTrans()和SetTransObject()。 语法格式: dw_control.SetTrans(TransactionObject) dw_control.SetTransObject(TransactionObject) 其中,dw_control是所使用的数据窗口控件,transactionObject是所要指定的事务对象。 这两个函数有一个重要的区别就是在使用SetTrans()函数时,用户不需做任何数据初始化或事务对象初始化工作。用户只需要在这里填充一个事务对象,PB就会自动完成对该事物对象的初始化以及和数据库连接的工作。而使用SetTransObject()函数时,用户必须首先把所用的事务对象连接到数据库上。但是,这并不意味着SetTrans()函数比SetTransObject()函数更好,使用SetTrans()函数时,每调用一次函数必须连接一次数据库,因为这个函数在每个事务处理的末端都会执行Disconnect语句。与此相反,使用SetTransObject()函数可以为数据库维持一个开放性的连接。因此在一般情况下,为了提高效率,总是采用SetTransObject()函数。 这两个函数都是成功时返回1,发生错误时返回-1。 二、检索数据 用于检索数据的函数只有一个,就是Retrieve()函数。 语法格式: dw_control.Retrieve() 如果数据窗口控件上的数据窗口对象是有检索参数的,就要在这个函数调用时加上检索参数。而且检索参数必须和数据窗口对象中定义顺序一致。 此函数返回一个长整型的数据,代表检索出来的数据行数。如果发生错误,将返回-1。 三、更新数据 当用户对数据窗口对象内的数据修改后,想把这些修改反映到数据库中去时,必须使用Update()函数。 语法格式: dw_control.Update() 这个更新可能成功,也可能失败。一般在这个函数被调用之后,总是要做一个检查。请看下面的例子: Int li_return li_return = dw_1.Update() IF li_return = 1 THEN

根式函数值域定稿版

根式函数值域 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】

探究含有根式的函数值域问题 含根式的函数的值域或者最值问题在高中数学的学习过程中时常遇到,因其解法灵活,又缺乏统一的规律,给我们造成了很大的困难,导致有些学生遇到根式就害怕。为此,本文系统总结此类函数值域的求解方法,供学生参考学习。 1.平方法 例1:求31++-=x x y 的值域 解:由题意知函数定义域为[]1,3-,两边同时平方得:322422+--+=x x y =4+()4212+- +x 利用图像可得[]8,42∈y ,又知?y 0[]22,2∈∴y 所以函数值域为[]22,2 析:平方法求值域适用于平方之后可以消去根式外面未知量的题型。把解析式转化为()x b a y ?+=2 的形式,先求y 2 的范围,再得出y 的范围即值域。 2.换元法 例2: 求值域1)12--=x x y 2)x x y 2 4-+= 解:(1)首先定义域为[)+∞,1,令()01≥-=t x t ,将原函数转化为 [)+∞∈,0t ,?? ????+∞∈∴,815y 析:当函数解析式由未知量的整数幂与根式构成,并且根式内外的未知量的次幂保持一致。可以考虑用代数换元的方法把原函数转化成二次函数,再进行值域求解。 (2)首先,函数定义域为[]2,2-∈x ,不妨设αsin 2=x ,令?? ????-∈2,2ππα

则原函数转化为:??? ? ?+=+=4sin 22cos 2sin 2παααy ?? ????-∈2,2ππα,∴??????-∈+43,44πππα 析:形如题目中的解析式,考虑用三角换元的方法,在定义域的前提下,巧妙地规定角的取值范围,避免绝对值的出现。 不管是代数换元还是三角换元,它的目的都是为了去根式,故需要根据题目灵活选择新元,并注意新元的范围。 3.数形结合法 例3:1)求()()8222+-+= x x y 的值域。 2)求1362222+-++-= x x y x x 的最小值。 解:(1)()()8222+-+=x x y 82++-=x x 其解析式的几何意义为数轴上的一动点x ,到两定点2与-8的距离之和,结合数轴不难得到[]+∞∈,10y (2)解析式可转化为()()41312 2+++=--x x y , 定义域为R ,进行适当的变形 ()()=+++--413122x x ()()()()2031012 222----+++x x , 由它的形式联想两点间的距离公式,分别表示点到点的距离与点的距离之和。 点()0,x P 到()1,1A 和()2,3B 的距离之和。即PB PA y +=,结合图形可知 13min =+'=PB A P y ,其中()1,1-'A 析:根据解析式特点,值域问题转化成距离问题,结合图形得出最值,进而求出了值域。 例4:1) 求x x y x 2312 +--+=的值域

Pb常用概念与术语及script编程规范

Pb常用概念与术语及script编程规范 1.dbms 数据库管理系统的缩写,它是可以提供数据库管理功能的软件2.Profile 保存在pb初始化文件中的命名的参数的集合,它定义一个指向数据库的连接 3.Data Source 数据源,pb有五种数据源:QUICK SELECT,SQL SELECT,QUERY,EXTERNAL和STRORE PROCEDURE 4.ODBC 开放数据库连接的缩写,是微软提供的访问数据库的接口标准. 通过ODBC接口,PB可以连接到大部分DBMS 5.MTS MTS是微软事物服务器的缩写,它是基于一个组件的事物处理系统,支持开放.发行和管理基于组件的应用 https://www.wendangku.net/doc/7d4146894.html,PONENT 组件是在JAGUAR中或MTS中的一个包含业务逻辑的可重用模块.用户对象可以作为组件发行到中间层的JAGUAR或MTS服务器中. 7.LIBRARY 库,存储PB对象的文件,它的扩展名是.PBL 8.PAINTER

画笔,创建和编辑PB对象的编辑器,或是管理数据或库的工具9.APPLICATION OBJECT 应用对象是一个应用系统的入口点,它定义乐系统的一些应用级行为 10.SCRIPT 脚本是响应特定事件的一段语句的集合.在PB中编写脚本执行POWERSCRIPT语言 11.PRIMARY KEY 主健,唯一标识表中每一条记录的一个或多个列. https://www.wendangku.net/doc/7d4146894.html,EROBJECT 用户对象,用户自定义的用于完成某项处理的.可重复使用的对象 13.FOREIGN KEY 外部键,是一种约束,要求构成外部键的一个或多个列的值必须对应主健表中的一个值 14.EVENT 事件,一个发生在对象或控制中的动作,可以触发一段脚本程序的执行. 15.FUNCTION 函数,执行特定处理的例程,在面对对象编程中,也称方法. 16.POLYMORPHISM 多态,同一个对象中的两个或多个名字相同,参数列表不同的

二次函数和几何综合压轴题题型归纳

学生: 科目: 数 学 教师: 刘美玲 一、二次函数和特殊多边形形状 二、二次函数和特殊多边形面积 三、函数动点引起的最值问题 四、常考点汇总 1、两点间的距离公式:()()22B A B A x x y y AB -+-= 2、中点坐标:线段AB 的中点C 的坐标为:??? ??++22 B A B A y y x x , 直线11b x k y +=(01≠k )与22b x k y +=(02≠k )的位置关系: (1)两直线平行?21k k =且21b b ≠ (2)两直线相交?21k k ≠ (3)两直线重合?21k k =且21b b = (4)两直线垂直?121-=k k 3、一元二次方程有整数根问题,解题步骤如下: ① 用?和参数的其他要求确定参数的取值范围; ② 解方程,求出方程的根;(两种形式:分式、二次根式) ③ 分析求解:若是分式,分母是分子的因数;若是二次根式,被开方式是完全平方式。 例:关于x 的一元二次方程()0122 2 =-m x m x ++有两个整数根,5<m 且m 为整数,求m 的值。 4、二次函数与x 轴的交点为整数点问题。(方法同上) 例:若抛物线()3132 +++=x m mx y 与x 轴交于两个不同的整数点,且m 为正整数,试确定 此抛物线的解析式。 课 题 函数的综合压轴题型归类 教学目标 1、 要学会利用特殊图形的性质去分析二次函数与特殊图形的关系 2、 掌握特殊图形面积的各种求法 重点、难点 1、 利用图形的性质找点 2、 分解图形求面积 教学内容

5、方程总有固定根问题,可以通过解方程的方法求出该固定根。举例如下: 已知关于x 的方程2 3(1)230mx m x m --+-=(m 为实数),求证:无论m 为何值,方程总有一个固定的根。 解:当0=m 时,1=x ; 当0≠m 时,()032 ≥-=?m ,()m m x 213?±-= ,m x 3 21-=、12=x ; 综上所述:无论m 为何值,方程总有一个固定的根是1。 6、函数过固定点问题,举例如下: 已知抛物线22 -+-=m mx x y (m 是常数),求证:不论m 为何值,该抛物线总经过一个固定的点,并求出固定点的坐标。 解:把原解析式变形为关于m 的方程()x m x y -=+-122 ; ∴ ???=-=+-0 1 02 2x x y ,解得:???=-=1 1 x y ; ∴ 抛物线总经过一个固定的点(1,-1)。 (题目要求等价于:关于m 的方程()x m x y -=+-122 不论m 为何值,方程恒成立) 小结.. :关于x 的方程b ax =有无数解????==0 b a 7、路径最值问题(待定的点所在的直线就是对称轴) (1)如图,直线1l 、2l ,点A 在2l 上,分别在1l 、2l 上确定两点M 、N ,使得MN AM +之和最小。 (2)如图,直线1l 、2l 相交,两个固定点A 、B ,分别在1l 、2l 上确定两点M 、N ,使得 AN MN BM ++之和最小。

PB 基本语句 循环语句

PB 基本语句循环语句 PB 基本语句 一、赋值语句 赋值语句用于给变量、对象属性赋值,这是应用程序中使用最频繁的语句,其语法格式为:variablename = expression 其中:⑴variablename是变量名或对象属性; ⑵expression是表达式,其数据类型应该与variablename的数据类型兼容。 下面是赋值语句的几个简单示例: Address = "北京" TaxRate = .05 Age = 30 mle.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。 例1:从单行编辑框中输入考分,按“输入”按钮再根据考分显示及格或不及格。 Integer s s = integer(sle_1.text) //sle_1 text单行编辑框文本 If s < 60 then St_1.text = “不及格”// St_1.text静态编辑框文本

PB常用函数

PB常用函数日期时间类函数 日期时间类函数的功能如下: Date:把日期转换为Date类型。 Time:把时间转换为Time类型。 Day:日期值。 Month:月值。 Year:年值。 DayName:星期几。 DayNumber:一周中的第几天。 DaysAfer:两个日期之间所差的天数。 SecondsAfer:两个时间之间所差的秒数。 Hour:小时。 Minute:分钟。 Second:秒。 Now:系统当前时间。 Today:系统日期和时间。 RelativeDate:指定日期前后的天数值。 RelativeTime:指定时间的前后时间值。 数值计算类函数 数值计算类函数主要的作用就是对数据进行计算,功能如下:Abs:返回数据的绝对值。 Max:求输入的最大值。 Min:求输入的最小值。 Ceiling:返回整数,小数会自动向上进位。 Int:返回整数,小数会自动向下退位。 Round:对数据进行四舍五入操作。 Truncate:删除掉小数点后若干位。 Cos:求余弦值。 Sin:求正弦值。 Tan:求正切值。 Exp:以e为底,输入值为次方的乘方值。 Sqrt:求平方根。 Fact:求阶乘。 Log:求自然对数。 LogTen:求以10为底的对数。 Mod:求余数。 Pi:求与PI的乘积。 Rand:返回1与输入值之间的一个伪随机数。 字符串类函数 字符串类函数的功能如下。 Fill:建立一个指定长度的字符串。 Lower:转换为小写字母。

Upper:转换为大写字母。 WordCap:首写字母大写,其他小写。 Space:由指定字符个数组成的空格字符串。 Left:从字符串左边开始指定字符串。 Right:从字符串右边开始指定字符串。 LeftTrim:删除字符串左边的空格。 RightTrim:删除字符串右边的空格。 Trim:删除左右两边的空格。 Len:返回字符串长度。 Match:判断是否有指定模式的字符。 Mid:取子字符串。 Replace:用指定字符替换另外一个字符串。 String:将数据转换为指定格式的字符串。 信息类函数 信息类函数可以获取数据窗口中的一些信息,函数的功能如下: CurrentRow:获取数据窗口的焦点的行数。 Page:获取当前记录的页数。 PageAcross:获取当前水平方向的页面。 PageCount:获取总页数。 RowHeight:获得记录的高度。 Describe:获取数据窗口对象的属性值。 IsRowModified:获取记录是否修改过,如果修改过返回True。 IsRowNew:获取是否新插入数据,如果插入返回True。 IsSelected:获取记录是否被选中,选中返True。 PageCountAcross:获取水平方向总页面。 RowCount:获取主缓冲区的总记录数。 统计类函数 统计类函数主要是用来对数据库中的数据进行统计操作,统计函数功能如下: Avg:计算字段的平均数,例如Avg(id)。 Max:计算字段的最大值,例如Max(id)。 Min:计算字段的最小值,例如Min(id)。 Median:计算字段的中间值。 Count:计算表或字段的记录数,例如Count(*)。 Frist:返回第一条记录。 Last:返回最后一条记录。 交叉表函数 只能在交叉列表风格的数据窗口中的细节区使用交叉表函数,交叉表的函数功能如下:CrosstabVag:计算字段数据的平均数。 CrosstabCount:计算字段数据的记录数。 CrosstabMax:计算字段数据的最大值。 CrosstabMin:计算字段数据的最小值。 数据类型转换与检查函数 数据类型转换与检查函数用于定义数据窗口的过滤条件、有效性检查和数据类型转换,数据类型转换与检查函数的功能如下:

PB得到首拼音码函数无错码

//得到首拼音码函数 //把这段代码加入到函数地f_get_py(string as_InputString) char lc_FirstLetter[23] string ls_ch string ls_SecondSecTable string ls_ReturnStr integer li_SecPosValue[23] integer i , j integer li_SectorCode integer li_PositionCode integer li_SecPosCode integer li_offset //Set initial value li_SecPosValue[]={1601,1637,1833,2078,2274,2302,2433,2594,2787,3106,3212,3472,3635,3722,3 730,3858,4027,4086,4390,4558,4684,4925,5249 } lc_FirstLetter[] = { "A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "J ", "K ", "L ", "M ", "N ", "O ", "P ", "Q ", "R ", "S ", "T ", "W ", "X ", "Y ", "Z "} ls_SecondSecTable= "CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZL SGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXD TTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCS CJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHYLYGXFPTYJYY ZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBN PTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQY RBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYG HQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWYWSBHTRXXGLHQ HFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNY TDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZN MLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCD HJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGXGKJRYWZ WYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHS Y[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBS QKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGB WHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZPMGFCSGLSXYMJSHXPJ XWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ [YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJ PCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[ YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMSXLZJQQHZYJCZYDJWB MYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZ NZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTS XGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKD GJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWG JJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCP

PB中的时间日期函数

常用的PB时间函数汇总收藏 Day() 功能得到日期型数据中的号数(1到31之间的整数值)。 语法Day ( date ) 参数date:要得到号数的日期值返回值 Integer。函数执行成功时返回号数(1到31之间的整数值)。如果date参数的值为NULL,则Day()函数返回NULL。 -------------------------------------------------------------------------------- DayName() 功能得到指定日期是一周中的星期几(例如,Sunday, Monday...)。 语法DayName ( date ) 参数date:date类型值或变量返回值String。函数执行成功时返回指定日期的星期表示(例如,Sunday, Monday...)。如果date参数的值为NULL,则DayName()函数返回NULL。 -------------------------------------------------------------------------------- DayNumber() 功能得到日期型数据是一星期中的第几天(用1到7之间的整数表示,星期天为1,星期一为2,...)。 语法DayNumber ( date ) 参数date:date类型值或变量返回值Integer。函数执行成功时返回指定日期是一星期中的第几天(用1~7表示,星期天为1,星期一为2,...)。如果date 参数的值为NULL,则DayNumber()函数返回NULL。 -------------------------------------------------------------------------------- DaysAfter() 功能得到两个日期间的天数。 语法DaysAfter ( date1, date2 ) 参数date1:date类型,指定起始日期date2:date类型,指定终止日期返回值Long。函数执行成功时得到两个日期之间的天数。如果date2的日期在date1的前面,那么DaysAfter()函数返回负值。如果任何参数的值为NULL,则DaysAfter()函数返回NULL。 -------------------------------------------------------------------------------- Hour() 功能得到时间值中的小时,采用24小时制。 语法Hour ( time ) 参数time:time类型的值返回值Integer。函数执行成功时得到time参数中的小时(00到23之间)。如果time参数的值为NULL,则Hour()函数返回NULL。---------------------------------------------------------------------

PB函数常用

Max() 功能求两个数中的最大值。 语法Max ( x, y ) 参数x:数值型变量或表达式,参加比较的第一个数y :数值型变量或表达式,参加比较的第二个数返回值以x、y中数据类型更精确的数据类型作为该函数的返回值数据类型。函数执行成功时返回参数比较的两个数中更大者。如果任何参数的值为NULL,Max()函数返回NULL。 Min() 功能求两个数中的最小值。 语法Min( x, y ) 参数x:数值型变量或表达式,参加比较的第一个数y :数值型变量或表达式,参加比较的第二个数返回值以x、y中数据类型更精确的数据类型作为该函数的返回值数据类型。函数执行成功时返回参数比较的两个数中较小者。如果任何参数的值为NULL,Min()函数返回NULL。 Mod() 功能求余数。 语法Mod ( x, y ) 参数x:数值型变量或表达式,被除数y :数值型变量或表达式,除数返回值以x、y中数据类型更精确的数据类型作为该函数的返回值数据类型。函数执行成功时返回x除以y所得的余数。如果任何参数的值为NULL,Mod()函数返回NULL。 Round() 功能将x四舍五入到n位。 语法Round ( x, n )参数x:要四舍五入的数值型数据n:整数类型,指定从哪个小数位上四舍五入x。有效值在0到18之间返回值Decimal。函数执行成功时返回将x四舍五入到小数点后第n位的数值,如果函数执行失败或任何参数的值为NULL,Round()函数返回NULL。Truncate() 功能截断数值到指定的小数位。 语法Truncate ( x, n ) 参数x:要截断的数值型数据n:整数类型,指定从哪个小数位上截断x。有效值在0到18之间返回值Decimal。函数执行成功时返回将x截断到小数点后第n位的数值,如果函数执行失败或任何参数的值为NULL,Truncate()函数返回NULL。所谓截断就是舍弃指定位之后的数值。 Asc() 功能得到字符串第一个字符的ASCII码整数值。 语法Asc ( string ) 参数string:要得到第一个字符ASCII值的字符串返回值Integer。函数执行成功时返回string 参数第一个字符的ASCII值,如果string参数的值为NULL,则Asc()函数返回NULL。Char() 功能将字符串的第一个字符、Blob变量的第一个值、或一个整数转换成字符。 语法Char ( n ) 参数n:字符串、Blob变量或整数,也可以是包含上述类型数据的Any类型变量返回值Char。返回参数n的第一个字符。如果n参数的值为NULL,则Char()函数返回NULL。 Dec()

pb函数max

点后第n位的数值,如果函数执行失败或任何参数的值为NULL,Round()函数返回NULL。Sign() 功能确定n是整数、负数还是零。 语法Sign ( n ) 参数n:数值型变量或表达式,指定要测试符号的值返回值Integer。当n大于0时返回1;当n小于0时返回-1;当n等于0时返回0。如果参数n的值为NULL,Sign()函数返回NULL。Sin() 功能计算正弦,其中参数以弧度为单位。 语法Sin( n ) 参数n:数值型变量或表达式返回值Double。函数执行成功时返回n的正弦。如果参数n 的值为NULL,Sin()函数返回NULL。 Sqrt() 功能计算平方根。 语法Sqrt ( n ) 参数n:数值型变量或表达式,指定要计算平方根的数据返回值Double。函数执行成功时返回n的平方根。如果n是负数,则执行该函数时引发运行错误。如果参数n的值为NULL,Sqrt()函数返回NULL。 Tan() 功能计算正切,其中参数以弧度为单位。 语法Tan( n ) 参数n:数值型变量或表达式返回值Double。函数执行成功时返回n的正切。如果参数n 的值为NULL,Tan()函数返回NULL。 Truncate() 功能截断数值到指定的小数位。 语法Truncate ( x, n ) 参数x:要截断的数值型数据n:整数类型,指定从哪个小数位上截断x。有效值在0到18之间返回值Decimal。函数执行成功时返回将x截断到小数点后第n位的数值,如果函数执行失败或任何参数的值为NULL,Truncate()函数返回NULL。所谓截断就是舍弃指定位之后的数值。 Asc() 功能得到字符串第一个字符的ASCII码整数值。 语法Asc ( string ) 参数string:要得到第一个字符ASCII值的字符串返回值Integer。函数执行成功时返回string 参数第一个字符的ASCII值,如果string参数的值为NULL,则Asc()函数返回NULL。Char() 功能将字符串的第一个字符、Blob变量的第一个值、或一个整数转换成字符。 语法Char ( n ) 参数n:字符串、Blob变量或整数,也可以是包含上述类型数据的Any类型变量返回值Char。返回参数n的第一个字符。如果n参数的值为NULL,则Char()函数返回NULL。 Dec() 功能将字符串或Blob值转换成Decimal类型的值。 语法Dec ( stringorblob ) 参数stringorblob:string类型变量或Blob类型变量。Blob类型变量时,把该变量第一个值转换为Decimal类型的值,其余部分被忽略。stringorblob参数也可以是包含上述类型数据的

pb函数

PrintDefineFont() 功能定义打印作业使用的字体,对每个打印作业PowerBuilder支持八种字体。 语法PrintDefineFont(printjobnumber,fontnumber,facename,height,weight,fontpitch,fontfamily, italic,underline) 参数printjobnumber:用PrintOpen()函数打开的打印作业号fontnumber:指定赋给当前定义字体的编号,有效值在1到8之间facename:string类型,指定字体名称,该字体应该是你的打印机支持的字体,比如“宋体”height:Integer类型,使用正值指定字体的高度,以千分之一英寸为单位;使用负值指定字体点数,比如,-18代表18点。一般来说,使用点数更精确些weight:指定字体的磅数,正常字体为400磅,粗体为700磅fontpitch:FontPitch 枚举类型,指定字体标准。有效取值为:Default! - 缺省值;Fixed! - 固定形式;Variable! - 可变形式fontfamily:FontFamily枚举类型,指定字体系列。有效取值为:AnyFont!、Decorative!、Modern!、Roman!、Script!、Swiss!italic:boolean类型,指定是否使用斜体样式。有效取值为:TRUE - 使用斜体样式;FALSE - 不使用斜体样式。缺省值为FALSEunderline:boolean类型,指定是否加下划线。有效取值为:TRUE - 加下划线;FALSE - 不加下划线。缺省值为FALSE 返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintDefineFont()函数返回NULL。用法在一个打印作业中,应用程序能够最多同时定义8种字体。当应用程序需要使用更多的字体时,可以在使用了某个字体号输出内容后使用PrintDefineFont()函数将该字体号对应的字体更换为其它字体。 -------------------------------------------------------------------------------- PrintLine() 功能在当前打印页上绘出指定厚度的一条线。 语法PrintLine ( printjobnumber, x1, y1, x2, y2, thickness ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号x1:integer类型,指定直线起点的x坐标,以千分之一英寸为单位y1:integer类型,指定直线起点的y坐标,以千分之一英寸为单位x2:integer类型,指定直线终点的x坐标,以千分之一英寸为单位y2:integer 类型,指定直线终点的y坐标,以千分之一英寸为单位thickness:integer类型,指定直线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintLine()函数返回NULL。用法应用程序执行了PrintLine()函数后,该函数并不改变打印光标的位置。 -------------------------------------------------------------------------------- PrintOpen() 功能启动打印作业并返回作业号。 语法PrintOpen ( { jobname } ) 参数jobname:string类型,可选项,指定要打开打印作业的名称,该名称将显示在打印管理器窗口中返回值Long。函数执行成功时返回打印作业号,发生错误时返回-1。如果任何参数的值为NULL,PrintOpen()函数返回NULL。用法应用程序执行PrintOpen()函数后,启动新的打印作业并走纸到下一页,同时将打印机缺省字体设置为该打印作业的字体。打印光标的位置位于打印区的左上角。其它同组的打印函数使用PrintOpen()函数返回的作业号来标识作

pb函数

添加:dw_main.event ue_insert() 删除:dw_main.event ue_delete() 保存1:dw_main.event ue_save() 返回:close(parent) 窗口数据初始化:dw_main.retrieve() Trim()删除字符串首部和尾部的空格 OpenWithParm(windowvar,parameter{,parent}) windowvar 要打开窗口的窗口名,可以使用窗口画笔定义的窗口对象名也 可以使用该窗口对象的某个变量。Open() 函数把打开窗口的引用放置到 windowvar 变量中 parameter 指定要传递给打开窗口的数据该数据保存在Message 对象的属性中 parameter 参数的数据类型须是下述类型之一String Numeric PowerObject parent 可选项指定要打开窗口的父窗口要打开窗口成为父窗口的子窗口 只有当要打开窗口需要成为某个窗口的子窗口时才需要指定该参数如果应用程 序使用Open()函数打开某个子窗口或弹出窗口而又省略了该参数那么当前活动 窗口成为被打开窗口的父窗口. Scrolltorow()滚动数据窗口控件的内容到指定行,该函数改变当前行但不改 变当前列 CloseWithReturn(parent,'OK')关闭响应窗口w_employee_response 并向调用窗口传递字符串 ok Setfilter():定义数据窗口控件的过滤条件 Rowfocuschanged:当数据窗口控件的当前行被改变时触发 filter()在数据窗口控件中显示满足当前过滤条件的行不满足过滤条件的行从主缓冲 区中移动到过滤缓冲区 Upper ( string )将字符串中的小写字母转换为大写字母 SelectRow(row,boolean) 在数据窗口控件中选择或去掉选择加亮或去掉加亮指定的行 Row: long 类型指定要选择或去掉选择行的行号该参数的值指定为0 时 选择或去掉选择所有的行 boolean :boolean 类型指定要选择行或是去掉选择行有效取值为 TRUE 选中指定的行被选中行被加亮显示 FALSE 不选中指定的 如果某行已经被选中,然后调用SelectRow()来选中该行(boolean 参数设置为 TRUE), 该行依然保持选中状态如果某行没有被选中,然后调用SelectRow()来去掉该 行的选中状态(boolean 参数设置为FALSE) 该行依然保持未选中状态 Find( expression, start, end ); expression 一个字符串用于指定要查找的条件其值是个逻辑表达式表达式中 可以使用列名 start 一个长整数用于指明从哪一行开始查找该参数可以大于数据的总行数 end 一个长整数用于指明查找到哪一行结束查找该参数可以大于数据的总行 SetRedraw((boolean)指定每次修改控件属性后是否自动重绘控件 Pos()在一个字符串中查找所包含的另一个字符串的起始位置 Isnull()检查某个表达式是否为空值

相关文档