技术标签: powerbuilder
目录
1.点击菜单:File/New: 新建一个WorkSpace(工作空间):
3.点击Library按钮, 就可以看到我们创建的工作空间了:HelloWorld
4.下一步:创建一个Application(应用程序实例):菜单: File/New
6.创建一个HelloWorld窗口:点击菜单:File/New
15.)UnsignedInteger, UnsignedInt, or UInt
PowerBuilder美国Sybase公司研制的一种新型、快速开发工具,是客户机或服务器结构下,基于Windows3.x、Windows95和WindowsNT的一个集成化开发工具。它包含一个直观的图形界面和可 扩展的面向对象的编程语言PowerScript,提供与当前流行的大型数据库的接口,并通过ODBC与单机数据库相连。PowerBuilder提供了对目前流行的大多数关系数据库管理系统的支持,由于在PowerBuilder的应用程序中对数据库访问的部分一般采用国际化标准数据库查询语言SQL,使得用PowerBuilder开发的应用程序可以不做修改或者只做少量的修改就可以在不同的后台数据库管理系统上使用。用PowerBuilder开发的应用程序是独立于服务器上的数据库管理系统的
应用程序实例名:HelloWorld(Library, Target使用默认值就好)
a) WorkSpace(工作空间):
b) Application(应用程序实例):
c)Library(对象库)
如果你点击Libray按钮打开的窗口是这样:
则可以这样改为当前工作空间:鼠标放空白处, 点击鼠标右键弹出菜单:
点击Set Root: -->
调整窗口大小, 修改窗口标题为HelloWorld, 按保存按钮 --》输入窗口对象名w_helloworld,
w表示这是一个Window(窗口), 下划线后面用来表达用途或用意。(这是一种基本的编程命名规范(一般不受限于开发语言或开发工具),更多详细可以百度一下)
首先我们要在Application对象的Open(可以理解为初始化)事件,输入如下代码:
Open(w_helloworld)
提醒:PB(PowerBuilder简称PB)所有对象或类型定义, 都是不区分大小写字母
在PB中, 如果需要使用或设置一个可变值,你可以命名一个变量。当然,定义的变量必须是编译器可识别的,换句话说,必须在限定的范围内。
你可以在任何地方使用变量, 比如,作为函数的参数,或变量申明语句。
变量类型 | 描述 | 作用域 |
---|---|---|
局部变量 | 一般在事件或函数或代码块间声名,只在定义的区域内有效,如果是事件中定义,则仅在此事件内有效,如果在一个函数中定义,则只在此函数内有效,如果是定义于代码块中,那么只在此代码块间有效 | 定义的事件,函数,代码块 |
共享变量 | 共享变量是一种静态变量,这不仅意味着它所在的对象关闭后再次打开时,共享变量依然保持对象关闭时的值,而且还意味着同一个类多个实例中的同名共享变量保 持相同的值。 | |
全局变量 | 全局变量在整个应用程序中都可访问,它的作用域是整个应用程序 。 | 整个应用程序 |
实例变量 | 一个属于一个对象的变量,它与该对象的一个实例相关联(您可以把它看作是对象的属性)。实例变量有访问关键字(public, protected, private),以确定其他对象的脚本是否可以访问它们。实例变量可以属于应用程序、窗口、用户对象或菜单。 | 当前对象 |
tips:对象中定义或查找实例全局、全局变量、共享变量,我们可以打开此对象设计视图,找到Declare instance Variables一栏,
上方的下拉框中,有多重方式选择:
Global Variables
shared Variables
Instance Variables
后面两种暂不理会,后面会讲到。
我们继续上面的HelloWolrd例子, 定义一个长整型全局变量gl_test(g: global, l: long)
定义了gl_test, 那么你可以在任意的对象或函数中使用此对象。
一个二进制对象。 用来存放无边界的数据对象(例如, 普通二进制, 图像, 以及word文档等).
值只能为true(真)或false(假)
一个8位的无符整型, 范围:0 - 255
单个Unicode字符, 例如.:
char c = 't'
日期类型,包含完整的年(1000 to 3000), 月份的数字(01 to 12), 天数字(01 to 31).
使用文字值
用文字值赋值, 使用连接符(-)分割年月日. 例如:
2001-12-25 // 2001年12月25日
2003-02-06 // 2003年2月6日
日期时间类型,常用在数据库上读写DateTime类型的值。转换成PB中可用的DateTime类型:
当从数据库读到值后,使用函数Date(datetime) 转换一个DateTime值为一个PB date值 。
当从数据库读到值后,使用函数Time(datetime) 转换一个DateTime值为一个PB time类型的值。
在写入一个DateTime值到数据库前,使用函数DateTime (date, time) 转换date +(可选) time类型的值为DateTime类型.
PB支持任何支持毫秒的DBMS数据库接口。
有符号小数数字数字, 正数或负数, 最多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
精度为15位的有符号浮点数, 范围:2.2250738585073E-308 到 1.79769313486231E+308, –2.2250738585073E-308 到 –1.79769313486231E+308.
16位有符号整数, 范围: -32768 到 +32767.
使用文字 若要指定文字值,请使用任何整数(正数、负数或零)。前导加号是可选的(18和+18相同)。例如:
1 123 1200 +55 -32
32位有符号整数, 范围: -2147483648 到 +2147483647.
使用文字
使用文字表示整数,但允许使用较长的数字。
64位有符号整数, 范围 -9223372036854775808 到 9223372036854775807.
使用文字
使用文字表示整数,但允许使用较长的数字。
六位数精度的有符号浮点数,范围: 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
任意拥有可变长度的Unicode字符串 (长度范围:0 to 1073741823),例如
string sTest
sTest = 'I Love Apple' //单引号和双引号都可以
sTest = "I Love Apple"
如果遇到特殊字符, 可以使用"~"转义符,例如
string s = 'it~'s a good idea!'
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微秒
16位无符号整数, 范围: 0 到 65535.
32位无符号整数, 范围: 0 到 4294967295。
本章节主要说明Powerbuilder Script的运算符(DataWindow的后面会讲)。例如: 1 +2 = 3 ,其中1 和 2 被称为操作数,"+" 称为运算符。
Powerbuilder Script语言支持以下类型的运算符:
算术运算符
赋值运算符
比较(关系)运算符
逻辑运算符
假设我们定义了如下变量:
long a = 10, b= 2, c = 0
操作符 |
描述 |
举例 |
---|---|---|
+ |
加法运算 |
c=12 |
- |
减法运算 |
c= 8 除非您已经禁止在标识符名称中使用破折号,否则您必须用空格将减号括起来。 |
* |
乘法运算 |
c = 20 |
/ |
除法运算 |
c = 5 |
^ |
指数运算 |
c = 100 |
为变量或对象属性赋值,或将对象引用赋给对象变量。
语法
变量名 = 表达式
参数 |
描述 |
---|---|
变量名 |
要赋值的变量或对象属性的名称。变量名可以包含点符号,以便用一个或多个对象名来限定变量。 |
表达式 |
其数据类型与变量名兼容的表达式。 |
用法
使用赋值语句给变量赋值。要在脚本的任何位置为变量赋值,请使用等号(=)。例如:
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
假设我们定了如下变量
long a = 10, b= 2
操作符 |
描述 |
举例 |
---|---|---|
= |
等于 |
a = b, 返回false |
> |
大于 |
a > b,返回true |
< |
小于 |
a < b,返回false |
<> |
不等于 |
|
>= |
大于或等于 |
|
<= |
小于或等于 |
a <= b, 返回false |
操作符 |
描述 |
举例 |
---|---|---|
NOT |
逻辑否定 |
not (a=b), 返回true |
AND |
逻辑与 |
a = 10 and b = 2, 返回true |
OR |
逻辑或 |
|
优先顺序
为了确保结果的可预测性,PowerBuilder表达式中的所有运算符都按照特定的优先顺序进行计算。当运算符具有相同的优先级时,PowerBuilder会从左到右对它们进行求值。 这些是按优先级降序排列的运算符:
操作符 |
描述 |
---|---|
( ) |
分组(参见下面关于覆盖的注释) |
+, - |
一元加号和一元减号(表示正数或负数) |
^ |
指数运算 |
*, / |
乘法和除法 |
+, - |
加减;字符串串接 |
=, >, <, <=, >=, <> |
比较(关系)运算符 |
NOT |
逻辑否定 |
AND |
逻辑与 |
OR |
逻辑或 |
如何覆盖
若要重写顺序,请将表达式括在括号中。这确定了PowerBuilder评估表达式的组和顺序。当存在嵌套组时,将从内向外对这些组进行评估。 例如,在表达式(x+(y*(a+b))中,首先计算a+b。然后a和b的和乘以y,这个乘积加到x上
常用对象(点菜单, File/New, 选中PB Object, 我们可以看到下面面板, 红色标记区域是常用的对象类型)
用户自定义类, 是一个非可视化对象,我们创建一个nvo_fish, 属性有name, price, 因为鱼没有指定具体哪一品种, 所以可以理解为一个非可视对象
点菜单, File/New -->PB Object --> Custom Class:
勾上AutoIntantiate实现自动实例化, 使用时可以作为一个静态类来使用。
自定义实现一些标准类:如oleobject, connection等
如果你经常使用一些类似的组件在同一窗口做相同任务 ,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)
运行程序效果如下:
显示DLL中定义的可视化控件的用户对象。该控件不是PowerBuilder对象层次结构的一部分。DLL开发人员提供设置样式位的信息,这些样式位控制其表示形式。 它的事件、函数和属性由DLL的开发人员指定。 外部用户对象与OCX不同,后者可以放在OLE控件中。
一般不常用, 更多用的是Custom Visual, 本章暂时跳过。
从特定的可视化控件继承。您可以设置属性并编写脚本,以便控件可以使用。 它与继承它的控件以及您添加的任何控件具有相同的事件和属性,该控件是属于PowerBuilder对象层次结构的一部分。
下面将创建一个时间选择框(timebox)为例:
窗口中插入刚刚新建的对象timebox
运行后, timebox中可以输入时间:
2022-5-2 更新
更多努力更新中。。。
这一篇将带你快速掌握PB的基础知识,内容有变量,类型,对象,函数,事件,绘制数据窗口,连接数据库等,敬请期待!
从2022-4-12开始每周1/2更,敬请期待!
文章浏览阅读511次,点赞5次,收藏5次。指定加密算法(e.g. AES-256-CBC), 对明文生成MAC数据。_openssl生成cmac
文章浏览阅读6.8k次,点赞2次,收藏18次。C语言学习(十)C语言中的小数小数的表示方式小数分为整数部分和小数部分,他们之间用点号.分隔,如0.0、7.5、4.098、0.27、-987.333等都是合法小数,这是最常见的小数形式,我们称为十进制形式。此外,小时也可以采用指数形式,如3.2x103、0.0345x106、100.2323x10-6等。C语言同时支持以上两种小数形式。C语言中小数的指数形式为:aEn 或 aen其中a为尾数部分,是一个十进制的数字。n为指数部分,是一个十进制整数。e或者E是一个固定字符,用于分隔尾数和指数_c语言小数的定义变量类型
文章浏览阅读496次,点赞20次,收藏3次。今天老板找我,我说我很忙,后来老板过来的时候发现我在做这个,让我走人,可恶。
文章浏览阅读1k次,点赞27次,收藏13次。在本篇文章中,我们探讨了Discord注册的全过程,以及如何有效避免因常见问题而导致Discord注册就被禁用的情况,同时介绍了使用AdsPower指纹浏览器避免账号被封的策略。无论您是在担心“Discord会封号吗”还是已经面临Discord被封的挑战,都可以考虑使用AdsPower这样的工具来保护和管理您的账户。当然,及时且合理地进行Discord申诉,依然有机会恢复您的账号,希望以上内容对大家有所帮助。_discord注册输错年龄被限制
文章浏览阅读723次,点赞11次,收藏8次。结论: 本文介绍了一种基于三菱FX3U PLC与欧姆龙E5CC温控器的通讯实战程序,通过昆仑通态触摸屏实现对温度的设定和读取实际温度等功能。而在实际应用中,与PLC的通讯成为了温控器的一个重要功能,通过PLC可以对温控器进行远程控制、设定温度值、读取实际温度等操作,大大提高了生产效率和自动化程度。功能:通过昆仑通态触摸屏,三菱FX3U 485BD板,实现对欧姆龙E5CC温控器 设定温度值,读取实际温度,设定探头类型,设定报警值,设定报警类型,报警上下限功能。三菱FX3U与欧姆龙E5CC温控器通讯实战程序。_三菱plc触摸屏温控器通讯
文章浏览阅读9.7k次,点赞12次,收藏16次。阅读李忠的《x86汇编语言》看到的一段代码,写入博客,算是个人的笔记吧。_x86汇编读取硬盘dma
文章浏览阅读1.7w次,点赞3次,收藏22次。假如目前有三个文件a.c、b.c、ab.lds:1.arm-none-eabi-gccarm-none-eabi-gcc --help 查看帮助信息。arm-none-eabi-gcc -c a.c 生成a.o文件。arm-none-eabi-gcc -g -c a.c 生成a.o文件,-g使得如果反汇编可对应C语言显示。arm-none-eabi-gcc -c_arm-none-eabi-gcc objdump
文章浏览阅读353次。要点概括:1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy.savetxt numpy.loadtxt 1. numpy.save(file, arr, allow_pickle=True, fix_imports=True)file:文件名/文..._写入numpy数组到gz中
文章浏览阅读261次,点赞5次,收藏2次。R实用绘图系列主要是带领大家绘制一些实用、好看而又不太复杂的科研常用图形,主打一个实用,该系列会持续更新,有需要的小伙伴赶紧关注起来吧。_火山图-logfdr
文章浏览阅读631次,点赞9次,收藏4次。七、修改成功后,再去重启MySQL服务,一般就可以成功了,但我遇到一些错误,提示MySQL服务打不开,我查了一些资料,发现应该是新建的MySQL文件夹,没有相应的权限,还要加一下network service权限。在工作上,服务器当时只有C盘,所以把数据库安装到C盘上了,后来新添加了D盘,并且随着数据量增加,C盘也频频内存爆红,只能移到D盘了,经过实际操作,也遇到了许多问题,在此做出总结。最后加完权限,就可以正式启动,然后可以再查询一下第一步的语句,应该就改到新的路径中了。_mysql数据库从c盘迁移到d盘
文章浏览阅读2.1k次,点赞4次,收藏5次。mosh 笔记_sql 事务隔离
文章浏览阅读6.2k次。1、卸载掉冲突的文件,安装新的文件。如果由于由于依赖关系导致要卸载很多软件,那可以优先考虑下一个方法。2、安装的时候增加--replacefiles参数,例如 rpm -ivh xxx.rpm --replacefiles,但是不知道在yum里如何实现_conflicts with file from package supervisor-3.1.3-3.el7.noarch