目录

一、了解PowerBuilder 

二、第一个HelloWorld程序

 1.点击菜单:File/New: 新建一个WorkSpace(工作空间):

2.点OK, 这里我们命名HelloWorld:​

3.点击Library按钮, 就可以看到我们创建的工作空间了:HelloWorld

4.下一步:创建一个Application(应用程序实例):菜单: File/New

5.项目文件结构:​

6.创建一个HelloWorld窗口:点击菜单:File/New 

7.运行Application前,我们要打开刚刚创建的窗口

8.运行:

三. 基础学习

1.变量

a.变量类型

b.定义一个全局变量

2.基本数据类型

1).Blob

2).Boolean

3).Byte

4).Char or character

5).Date

6.)DateTime

7.)Decimal or Dec

8.)Double

9.)Integer or Int

10.)Long

11.)LongLong

12.)Real

13).String

14.)Time

15.)UnsignedInteger, UnsignedInt, or UInt

16.)UnsignedLong or ULong

3.运算符

a).什么是运算符

b).算术运算符

c).赋值运算符

d).比较(关系)运算符

e).逻辑运算符

f).PowerBuilder表达式中的运算符优先级

5.常用对象

a).Custom Class




一、了解PowerBuilder 

PowerBuilder美国Sybase公司研制的一种新型、快速开发工具,是客户机或服务器结构下,基于Windows3.xWindows95WindowsNT的一个集成化开发工具。它包含一个直观的图形界面和可 扩展的面向对象的编程语言PowerScript,提供与当前流行的大型数据库的接口,并通过ODBC与单机数据库相连。PowerBuilder提供了对目前流行的大多数关系数据库管理系统的支持,由于在PowerBuilder的应用程序中对数据库访问的部分一般采用国际化标准数据库查询语言SQL,使得用PowerBuilder开发的应用程序可以不做修改或者只做少量的修改就可以在不同的后台数据库管理系统上使用。用PowerBuilder开发的应用程序是独立于服务器上的数据库管理系统的

二、第一个HelloWorld程序

 1.点击菜单:File/New: 新建一个WorkSpace(工作空间):

2.点OK, 这里我们命名HelloWorld:

3.点击Library按钮, 就可以看到我们创建的工作空间了:HelloWorld

4.下一步:创建一个Application(应用程序实例):菜单: File/New

应用程序实例名:HelloWorld(Library, Target使用默认值就好)

5.项目文件结构:

a) WorkSpace(工作空间):

b) Application(应用程序实例):

c)Library(对象库)

如果你点击Libray按钮打开的窗口是这样:

则可以这样改为当前工作空间:鼠标放空白处, 点击鼠标右键弹出菜单:

点击Set Root: -->

6.创建一个HelloWorld窗口:点击菜单:File/New 

调整窗口大小, 修改窗口标题为HelloWorld, 按保存按钮 --》输入窗口对象名w_helloworld,

w表示这是一个Window(窗口), 下划线后面用来表达用途或用意。(这是一种基本的编程命名规范(一般不受限于开发语言或开发工具),更多详细可以百度一下)

7.运行Application前,我们要打开刚刚创建的窗口

首先我们要在Application对象的Open(可以理解为初始化)事件,输入如下代码:
 

Open(w_helloworld)

提醒:PB(PowerBuilder简称PB)所有对象或类型定义, 都是不区分大小写字母

8.运行:

三. 基础学习

1.变量

在PB中, 如果需要使用或设置一个可变值,你可以命名一个变量。当然,定义的变量必须是编译器可识别的,换句话说,必须在限定的范围内。

你可以在任何地方使用变量, 比如,作为函数的参数,或变量申明语句。

a.变量类型

变量类型描述作用域
局部变量一般在事件或函数或代码块间声名,只在定义的区域内有效,如果是事件中定义,则仅在此事件内有效,如果在一个函数中定义,则只在此函数内有效,如果是定义于代码块中,那么只在此代码块间有效定义的事件,函数,代码块
共享变量共享变量是一种静态变量,这不仅意味着它所在的对象关闭后再次打开时,共享变量依然保持对象关闭时的值,而且还意味着同一个类多个实例中的同名共享变量保 持相同的值。
全局变量全局变量在整个应用程序中都可访问,它的作用域是整个应用程序 。 整个应用程序
实例变量一个属于一个对象的变量,它与该对象的一个实例相关联(您可以把它看作是对象的属性)。实例变量有访问关键字(public, protected, private),以确定其他对象的脚本是否可以访问它们。实例变量可以属于应用程序、窗口、用户对象或菜单。当前对象

tips:对象中定义或查找实例全局、全局变量、共享变量,我们可以打开此对象设计视图,找到Declare instance Variables一栏,

上方的下拉框中,有多重方式选择:

Global Variables

shared Variables

Instance Variables

后面两种暂不理会,后面会讲到。

b.定义一个全局变量

我们继续上面的HelloWolrd例子, 定义一个长整型全局变量gl_test(g: global, l: long)

定义了gl_test, 那么你可以在任意的对象或函数中使用此对象。

2.基本数据类型

1).Blob

一个二进制对象。 用来存放无边界的数据对象(例如, 普通二进制, 图像, 以及word文档等).

2).Boolean

值只能为true(真)或false(假)

3).Byte

一个8位的无符整型, 范围:0 - 255

4).Char or character

 单个Unicode字符, 例如.: 

char c = 't'

5).Date

日期类型,包含完整的年(1000 to 3000), 月份的数字(01 to 12), 天数字(01 to 31).

使用文字值

用文字值赋值, 使用连接符(-)分割年月日. 例如:

2001-12-25  // 2001年12月25日 
2003-02-06  // 2003年2月6日

6.)DateTime

日期时间类型,常用在数据库上读写DateTime类型的值。转换成PB中可用的DateTime类型:

  • 当从数据库读到值后,使用函数Date(datetime) 转换一个DateTime值为一个PB date值 。

  • 当从数据库读到值后,使用函数Time(datetime) 转换一个DateTime值为一个PB time类型的值。

  • 在写入一个DateTime值到数据库前,使用函数DateTime (date, time) 转换date +(可选) time类型的值为DateTime类型.

PB支持任何支持毫秒的DBMS数据库接口。

7.)Decimal or Dec

有符号小数数字数字, 正数或负数, 最多28位数字。您可以将小数点放在28位以内的任何位置,例如, 123.456, 0.000000000000000000000001, 12345678901234.5678901234.

使用文字值

若要指定文字值,请使用任何带小数点且无指数的数字。加号是可选的(95和+95相同)。对于介于0和1之间的数字,小数点左边的0是可选的(例如,0.1和0.1相同)。对于整数,小数点右边的零是可选的(32.00、32.0和32)。都是一样的)。例如:

12.34    0.005     14.0    -6500     +3.5555

8.)Double

精度为15位的有符号浮点数, 范围:2.2250738585073E-308  到 1.79769313486231E+308,  –2.2250738585073E-308 到 –1.79769313486231E+308.

9.)Integer or Int

16位有符号整数, 范围: -32768 到 +32767.

使用文字 若要指定文字值,请使用任何整数(正数、负数或零)。前导加号是可选的(18和+18相同)。例如:

1        123       1200       +55       -32

10.)Long

32位有符号整数, 范围: -2147483648 到 +2147483647.

使用文字

使用文字表示整数,但允许使用较长的数字。

11.)LongLong

64位有符号整数, 范围 -9223372036854775808 到 9223372036854775807.

使用文字

使用文字表示整数,但允许使用较长的数字。

12.)Real

六位数精度的有符号浮点数,范围: 3.402822E-38 到 3.402822E+38,  -3.402822E-38 到 -3.402822E+38.

使用文字 若要指定文字值,请使用十进制值,后跟E和整数;不允许有空格。E之前的十进制数遵循以上为十进制文字指定的所有约定。指数中的前导加号(E后面的整数)是可选的(3E5和3E+5是一样的). 例如:

2E4        2.5E38   +6.02E3    -4.1E-2
-7.45E16   7.7E+8   3.2E-38

13).String

任意拥有可变长度的Unicode字符串 (长度范围:0 to 1073741823),例如

string sTest
sTest = 'I Love Apple' //单引号和双引号都可以
sTest = "I Love Apple"

如果遇到特殊字符, 可以使用"~"转义符,例如

string s = 'it~'s a good idea!'

14.)Time

24小时制的时间,包括小时(00到23)、分钟(00到59)、秒(00到59)和秒的分数(最多六位数), 范围:  00:00:00 到 23:59:59.999999.

对于支持微秒的任何DBMS,PB在数据库接口中都支持微秒。

使用文字

24小时格式的时间,包括小时(00到23)、分钟(00到59)、秒(00到59)和秒的小数部分(最多六位数),范围从00:00:00到23:59:59.999999。您可以用冒号分隔时间的各个部分,但秒的分数除外,它应该用小数点分隔。例如:

21:09:15    // 晚上9点9分15秒
06:00:00    // 早上6点整
10:29:59    // 上午10点29分59秒
10:29:59.9  // 上午10点29分59秒9微秒

15.)UnsignedInteger, UnsignedInt, or UInt

16位无符号整数, 范围: 0 到 65535.

16.)UnsignedLong or ULong

32位无符号整数, 范围: 0 到 4294967295。

3.运算符

a).什么是运算符

本章节主要说明Powerbuilder Script的运算符(DataWindow的后面会讲)。例如: 1 +2 = 3 ,其中1 和 2 被称为操作数,"+" 称为运算符。

Powerbuilder Script语言支持以下类型的运算符:

算术运算符

赋值运算符

比较(关系)运算符

逻辑运算符

b).算术运算符

假设我们定义了如下变量:

long a = 10, b= 2, c = 0

操作符

描述

举例

+

加法运算

c = a + b

c=12

-

减法运算

c = a - b

c= 8

除非您已经禁止在标识符名称中使用破折号,否则您必须用空格将减号括起来。

*

乘法运算

c = a * b

c = 20

/

除法运算

c = a / b

c = 5

^

指数运算

c = a ^ b

c = 100

c).赋值运算符

为变量或对象属性赋值,或将对象引用赋给对象变量。

语法

变量名 = 表达式

参数

描述

变量名

要赋值的变量或对象属性的名称。变量名可以包含点符号,以便用一个或多个对象名来限定变量。

表达式

其数据类型与变量名兼容的表达式。

用法

使用赋值语句给变量赋值。要在脚本的任何位置为变量赋值,请使用等号(=)。例如:

str1 = "I love Apple!"
taxRate = .65

不支持多重赋值

因为等号也是一个逻辑运算符,所以不能在一条语句中分配多个变量。例如,以下语句不会将值0分配给A和B:

A=B=0    // 0将不会分配给A和B。

该语句首先将B=0评估为真或假,然后尝试将该布尔值赋给A。当A不是布尔变量时,该行在编译时会产生错误。

给数组赋值

您可以用一条语句分配多个数组值,例如:

int arr[]
arr = {1, 2, 3, 4,5}

您也可以复制数组内容。例如,此语句将arr2的内容复制到数组arr1中:

arr1 = arr2

快捷操作符

下表中用于给变量赋值的PowerScript快捷方式相对于它们的等效方式具有微小的性能优势

赋值的快捷方式

运算符

举例

等同于

++

i ++

i = i + 1

--

i --

i = i - 1

+=

i += 3

i = i + 3

-=

i -= 3

i = i -3

*=

i *= 3

i = i * 3

/=

i /= 3

i = i / 3

^=

i ^=3

i = i ^ 3

除非您已经禁止在变量名中使用破折号,否则您必须在-和-=。如果没有,PowerScript会将减号作为变量名的一部分读取。

例子:


//这些语句分别为变量ld_date赋值:
date ld_date
ld_date = Today()
ld_date = 2006-01-01
ld_date = Date("January 1, 2006")

//这些语句将当前控件的父控件分配给一个窗口变量:
window lw_current_window
lw_current_window = Parent

//此语句使复选框不可见:
cbk_on.Visible = FALSE

//字符串类型赋值
string sudentName = "LILEI"

//赋值使用快捷操作符:
int i = 4
i ++    // i的值此时是5
i --    // i的值此时是4
i += 10 // i的值此时是14
i /= 2  // i的值此时是7
这些快捷操作符只能在纯赋值语句中使用。它们不能与语句中的其他运算符一起使用。例如,以下内容无效:

int i, j
i = 12
j = i ++   // INVALID

以下是有效的,因为++在赋值中是i自己使用的:
int i, j
i = 12
i ++
j = i

d).比较(关系)运算符

假设我们定了如下变量

long a = 10, b= 2

操作符

描述

举例

=

等于

a = b, 返回false

>

大于

a > b,返回true

<

小于

a < b,返回false

<>

不等于

a <> b, 返回true

>=

大于或等于

a >= b, 返回true

<=

小于或等于

a <= b, 返回false

e).逻辑运算符

操作符

描述

举例

NOT

逻辑否定

not (a=b), 返回true

AND

逻辑与

a = 10 and b = 2, 返回true

OR

逻辑或

a >=10 or b >= 10, 返回true

f).PowerBuilder表达式中的运算符优先级

优先顺序

为了确保结果的可预测性,PowerBuilder表达式中的所有运算符都按照特定的优先顺序进行计算。当运算符具有相同的优先级时,PowerBuilder会从左到右对它们进行求值。 这些是按优先级降序排列的运算符:

操作符

描述

( )

分组(参见下面关于覆盖的注释)

+, -

一元加号和一元减号(表示正数或负数)

^

指数运算

*, /

乘法和除法

+, -

加减;字符串串接

=, >, <, <=, >=, <>

比较(关系)运算符

NOT

逻辑否定

AND

逻辑与

OR

逻辑或

如何覆盖

若要重写顺序,请将表达式括在括号中。这确定了PowerBuilder评估表达式的组和顺序。当存在嵌套组时,将从内向外对这些组进行评估。 例如,在表达式(x+(y*(a+b))中,首先计算a+b。然后a和b的和乘以y,这个乘积加到x上

5.常用对象

常用对象(点菜单, File/New, 选中PB Object, 我们可以看到下面面板, 红色标记区域是常用的对象类型)

a).Custom Class

用户自定义类, 是一个非可视化对象,我们创建一个nvo_fish, 属性有name, price, 因为鱼没有指定具体哪一品种, 所以可以理解为一个非可视对象

点菜单, File/New -->PB Object --> Custom Class:

勾上AutoIntantiate实现自动实例化, 使用时可以作为一个静态类来使用。

b).Standard Class

自定义实现一些标准类:如oleobject, connection等

c).Custom Visual(自定义可视对象)

  • 如果你经常使用一些类似的组件在同一窗口做相同任务 ,n那么这种方法将会非常好用。下面我们将创建一个名为 cvo_daterange的自定义可视对象, 基本功能:可以选择一个日期范围(经常在做查询页面时, 日期查询往往都是一个范围)

     大致效果图:

 

 下面一步一步演示:

  1.新建一个structure: datarange(用来存放日期起始值):

2.新建一个cvo_daterange 自定义可视对象:

插入2个datapicker组件 

 更改它们一些属性为:

 定义一个protected的实例变量:​​​​​​​

protected:
daterange _value

 

 定义两个函数:

of_get_value: 获取当前值

of_set_value: 设置当前值

 在我们w_main窗口, 插入我们前面的自定义可视对象(插入前必须先关闭它的设计窗口)

 

 在w_main窗口, open事件(初始化)里更新此对象的值:
设定日期范围:当前日期(2022-4-12)前后30天

daterange lstr_value
lstr_value.fromValue =  datetime(RelativeDate(today(), -30))
lstr_value.toValue =  datetime(RelativeDate(today(),  30))
uo_daterange.of_set_value(lstr_value)

 运行程序效果如下:

d).Externel Visual

显示DLL中定义的可视化控件的用户对象。该控件不是PowerBuilder对象层次结构的一部分。DLL开发人员提供设置样式位的信息,这些样式位控制其表示形式。 它的事件、函数和属性由DLL的开发人员指定。 外部用户对象与OCX不同,后者可以放在OLE控件中。

一般不常用, 更多用的是Custom Visual, 本章暂时跳过。 

e).Standard Visual

从特定的可视化控件继承。您可以设置属性并编写脚本,以便控件可以使用。 它与继承它的控件以及您添加的任何控件具有相同的事件和属性,该控件是属于PowerBuilder对象层次结构的一部分。

下面将创建一个时间选择框(timebox)为例:

 窗口中插入刚刚新建的对象timebox

 

 运行后, timebox中可以输入时间:

 

 

 2022-5-2 更新

更多努力更新中。。。

f).Window

g).Menu

h).Structure

i).Function

这一篇将带你快速掌握PB的基础知识,内容有变量,类型,对象,函数,事件,绘制数据窗口,连接数据库等,敬请期待!

从2022-4-12开始每周1/2更,敬请期待!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐