2.2
创建应用对象
2.3
创建第一个窗口
2.4
创建数据窗口对象
2.5
创建第二个窗口对象
2.6
建立应用程序
2.7
运行应用程序
2.1 创建数据库
数据库应用程序的操作对象是数据库里的数据,应用程序的目的就是给用户提供一个良好的界面,使得用户能够方便有效地使用数据库中的数据,可见数据库是应用程序工作的基础,所以我们就先了解数据库的创建。
PowerBuilder作为一种数据库应用程序的开发工具,一般访问的是后台服务器上的大型数据库。但是PowerBuilder自身也带有本地的数据库管理系统SYBASE
SQL ANYWHERE,利用它我们可以创建本地的数据库,由于利用ODBC接口来实现应用程序和远程数据库或本地数据库的连接在操作上并没有太大的区别,下面我们利用PowerBuilder自带的数据库管理系统SYBASE
SQL ANYWHERE来创建本地数据库。
双击屏幕上的PowerBuilder 5.0图标,就可以启动PowerBuilder,图2-1显示的就是PowerBuilder的初始界面,可以看出,PowerBuilder的界面同其它WINDOWS
应用程序的界面是类似的,也是由菜单、工具条、工作区和状态条等部件组成。PowerBuilder工具条上的一个个图标被称为画板按钮,按下这些按钮可以打开相应的画板。利用这些画板我们可以创建各种对象,应用到PowerBuilder开发的应用程序中去。如果你对某个画板按钮的功能不太清楚,将鼠标放在这个按钮上不动,系统会在画板按钮的旁边显示一条简短的语句,说明此画板按钮的功能,另外也可以从按钮上的图标来识别它的功能。

图2-1
2.1.1 创建新的数据库
创建一个新的数据库的过程如下:
1) 单击工具条上的DATABASE画板按钮,利用它来创建新的数据库,单击后屏幕上弹出一个标题为SELECT TABLES的对话框(图2-2),让我们选择表,这些表是系统当前所连接的数据库中的表,因为我们现在是要创建新的数据库,所以单击对话框的CANCEL按钮关闭这个对话框,接着屏幕上显示的是一个完整的数据库画板窗口,窗口的标题显示的是系统当前所连接的数据库的名字。

图2-2
2) 单击FILE菜单,选择其中的CREATE DATABASE菜单项,屏幕上弹出了CREATE LOCAL DATABASE对话框,利用这个对话框我们就可以创建本地数据库。首先单击BROWSE按钮弹出一个对话框,用于选择数据库存放的目录和数据库的名字,这里不妨设定D:\DATABASE目录为数据库的存放路径。我们要创建的是一个通讯录管理程序,所以在对话框的文件名一栏中给它起名为TELEBOOK,然后单击保存按钮关闭BROWSE命令所弹出的对话框。注意到现在的对话框的DATABASE
NAME一栏中显示的就是我们刚刚设置的数据库的完整路径(图2-3)。对话框中还有很重要的USER ID、PASSWORD等项,它们是用来设置访问此数据库所需要的帐号、口令等信息,以防止对数据库的非法访问,维护数据库的安全性。
3)单击OK按钮,PowerBuilder的本地数据库管理系统就会自动生成SQL语句,在指定的目录D:\DATABASE下生成一个名为TELEBOOK的本地数据库,并以文件名TELEBOOK.DB保存在磁盘上。观察一下数据库窗口的标题,可以发现系统已经自动把新创建的TELEBOOK数据库作为系统当前所连接的数据库(图2-4)。

图2-3

图2-4
2.1.2 向数据库中添加表
数据库是一个容器,其中存放的是一个个的表。接下来我们就来为刚建的TELEBOOK数据库创建表,创建表的过程如下:
1) 单击工具条上的CREATE TABLE画板按钮,就弹出了标题为CREATE TABLE的对话框(图2-5),利用这个窗口我们就可以生成定义一张表所需要的各项信息。

图2-5
2) 一个表是由很多的字段组成的,接下来开始定义表的各个字段了。注意COLUMN NAME一项,它是用来输入表的字段的名字。这里输入第一个字段的名字为NUMBER,代表一个人在通讯录中的编号。单击DATA
TYPE一栏的下拉箭头,从中选择当前字段的数据类型,不妨把NUMBER字段设置为INTEGER整型。这时WIDTH和DEC两项是灰色的,这表示对于整型字段,数据宽度和小数点后的数据宽度两项是不可操作的。单击NULL一栏的下拉列表框,弹出YES
和NO两项,是用来选择当前的字段是否可以取空值,也就是在以后的实际记录中这一个字段是否可以不往里面输入数据,因为通讯录中的每一条记录都必须有一个编号,所以在NULL项中选择NO,表示这个字段不能取空值。注意到对话框的下部还有很多项用来设置当前字段的扩展信息,要指出的是,对于具体的某个字段,只要对确实需要定义和修改的属性进行修改,其它的属性采用系统所给定的缺省值就可以了。此外有些属性我们等到表建立好以后再重新定义。注意扩展属性中的HEADER项,系统已经设置了缺省值NUMBER,这里把它修改为“编号”,同样地把LABEL项中的缺省值修改为“编号”,上面定义的这两项是设置这个表将来通过数据窗口等途径显示出来时的字段题头和标签。这样就定义好了NUMBER字段的一些基本属性(图2-6)。
3) 单击窗口上部中NUMBER字段的最后一项DEFAULT激活它,然后按TAB键,窗口中又出现一行让我们定义表的第二个字段的有关属性,这里定义第二个字段的字段名为NAME,代表记录中一个人的名字,数据类型选择为CHAR字符型。最大宽度WIDTH不妨设置为20,显然这个字段也应该是

图(2-6)
非空的,然后把这个字段的题头和标签都设定为“名字”。
4) 用类似的方法接着定义第三个字段的名字为HOME-ADDRESS,代表家庭地址。它的数据类型为CHAR型,宽度为50,因为在通讯录中可能暂时不知道某个人的家庭地址,所以这个字段可以是空的,即NULL栏选择为YES,字段的题头和标签都定义为“家庭地址”。接着定义第四个字段的名字为POSTCODE,代表邮政编码,它的数据类型设为NUMERIC,即数值型,宽度为6,DEC一栏为数值的小数点后的位数,这里设为0,NULL设项为YES,题头和标签设置为“邮政编码”,第五个字段的名字定义为WORK-ADDRESS,代表工作单位的地址,数据类型也为CHAR型,宽度为50,NULL项为YES,题头和标签设置为“工作单位”,第六个字段的名字设定为TELEPHONE,代表电话号码,数据类型设置为CHAR
型,数据宽度为15,NULL项为YES,题头和标签定为“电话号码”,最后一个字段给它起名为STATUS,代表一个人的目前状况,这个字段的值可能会因为人的不同,有时很长,有时很短,有时甚至可以为空值,所以定义它的数据类型为VARCHAR型,即变宽字符型,它的最大长度设置为256,NULL项为YES,题头和标签设为“目前状况”,这样我们就完成了对一个表的基本结构的设置工作(图2-7)。

图2-7
5)下一步把表起个名字保存起来,单击工具条上的SAVE CHANGES按钮,系统弹出一个对话框让我们输入表的名字(图2-8),在TABLE
NAME一栏中给它起名为MYTELEBOOK,单击OK按钮关闭对话框。注意到这时窗口的标题已经从UNTITLED变成了MYTELEBOOK,表示名为MYTELEBOOK的表已经成功地创建了。

图2-8
2.1.3 定义表的关键字
对于一个表来说,一般总需要定义关键字,关键字所在字段的值对于表中不同的记录一定是不相同的,关键字是维护数据库的完整性和正确性的重要手段。
定义表MYTELEBOOK的关键字的过程如下:
1) 单击工具条上的PROPERTIES按钮,系统弹出一个对话框用来选择和设置表的各种属性,在对话框中单击PRIMARY
KEY标签,来为表定义关键字,单击对话框下部所显示的表的NUMBER字段,可以发现NUMBER字段出现在对话框上部的KEY
COLUMNS一栏中(图2-9),表示字段NUMBER已经成为关键字的组成部分,这里仅选择NUMBER字段作为表的关键字,单击OK按钮关闭对话框,MYTELEBOOK的关键字已经成功地设置为NUMBER字段。

图2-9
2) 单击工具条上的CLOSE按钮,系统弹出一个对话框询问是否保存对表的修改,选择“是”后对话框和CREATE
TABLE窗口都被关闭,一个标题为MYTELEBOOK的表出现在DATABASE窗口中,注意到有一个上面画有钥匙图形的小图标指向NUMBER字段,表明NUMBER是当前这个表的关键字段。
2.1.4 定义字段的扩展属性
接下来我们根据需要来定义表MYTELEBOOK中的一些字段的某些扩展属性。定义NUMBER字段扩展属性的过程如下:
1) 鼠标放在NUMBER字段上,单击鼠标右键,然后单击弹出的菜单的PROPERTIES菜单项,屏幕上弹出一个用来定义字段的扩展属性的对话框,对于NUMBER字段,我们想要设置的扩展属性是VALIDATION属性,也就是设置NUMBER字段的有效性检查规则,有效性检查规则的作用是,如果输入记录的NUMBER字段的值通不过这个有效性规则检查时,就拒绝把这条记录放进表中。
2) 单击VALIDATION标签,VALIDATION RULE一栏用来选择一条有效性规则,因为目前还没有可用的规则,所以这一栏目前是空的。单击NEW按钮,屏幕上弹出一个对话框用来创建一条新规则,在NAME框中输入新规则的名字为NUMBER-VALID,单击@NUMBER按钮,可以发现“@NUMBER”出现在RULE
DEFINITION文本框中,它代表字段NUMBER的值,我们接着在这个文本框中输入文本“>0 and @NUMBER<1000”(图2-10)。

图2-10
3) 单击OK按钮关闭创建规则对话框,可以发现字段属性定义对话框的VALIDATION RULE一栏中已经有了我们刚刚定义的规则NUMBER-VALID,选中这条规则,单击APPLY按钮后这条规则就成为NUMBER字段的有效性检查规则。单击OK按钮关闭对话框。NUMBER字段的有效性检查规则就建立好了。可以用鼠标右键单击NUMBER字段,选择DEFINITION菜单,观察弹出的对话框中的VALIDATION一栏,可以看到其中出现的就是刚刚定义的规则(图2-11)。

图2-11
定义POSTCODE字段扩展属性的过程如下:
1) 用鼠标右键单击POSTCODE字段,单击PROPERTIES菜单后打开定义POSTCODE字段扩展属性的对话框。单击DISPLAY标签就可以为POSTCODE字段定义显示样式,也就是通过数据窗口等方式进行操作时数据的显示风格,
2) 单击NEW按钮开始定义一个新的显示风格,在弹出的对话框中给这个显示样式起名为POSTCODE-DISPLAY,在格式FORMAT
一栏中输入“000000”,格式中的“0”是有特殊含义的,它表示不可缺少的一个数字,如果没有输入这个数字的话,就会以“0”来补充,因为邮政编码是固定的六位数,所以这里定义显示格式为六个零,这样就可以规范化地显示数据。TEST
VALUE 栏用来对显示格式进行测试,例如输入28后单击TEST按钮,可以发现显示出来的测试值为“000028”,系统自动补充了四个零(图2-12)。

图2-12
3) 单击OK按钮关闭创建显示风格对话框。可以发现这时定义扩展属性对话框中的DISPLAY
FORMAT一栏中多了一个我们刚刚定义的显示风格POSTCODE-DISPLAY,选中它,单击APPLY按钮把它应用到POSTCODE字段上,最后单击OK按钮关闭对话框,就完成了POSTCODE字段显示风格的设置。
编辑样式就是用户编辑数据时数据的显示格式,对输入时有特殊格式要求的数据定义编辑样式是一种好的习惯。定义TELEPHONE字段的扩展属性的过程如下:
1 ) 右键单击TELEPHONE字段后选择PROPERTIES菜单,在弹出的对话框中选择EDIT
STYLE标签,
2) 单击NEW按钮开始定义编辑样式,在弹出的对话框的NAME栏中输入编辑样式的名字为TELEPHONE-EDIT,STYLE栏中选择样式为EDITMASK,即编辑屏蔽风格,利用这种样式中的特殊字符可以决定在编辑的时候以什么样的格式显示什么样的字符,以及什么样的输入可以被接受。电话号码的样式一般都是前面是区号,然后是一条短横线,然后是具体的本地号码,所以在MASK一栏中输入如下字符串作为编辑格式“(####)-########”,格式中的括弧和短横线都会事先显示在要输入记录的相应字段中,事实上观察对话框的TEST一栏就可以发现已经显示了括弧和横线。格式中的“#”代表一个数字,在括弧中有四个“#”,表示最多可以输入四个数字作为区号。类似地,格式最后的八个“#”表示本地号码最多可以有八位。作为试验,在TEST栏的括弧中输入“025”,然后在横线后输入“7980960”,可以看出输入这样的一个南京地区的电话号码是可以的(图2-13)。

图2-13
3) 单击OK按钮关闭创建编辑风格对话框,可以看出在原来的设定扩展属性对话框中多了我们刚刚创建的编辑样式TELEPHONE-EDIT,选中它后单击APPLY按钮把它应用到TELEPHONE字段上,最后单击OK按钮关闭对话框,就完成了TELEPHONE字段编辑样式的设置。
2.1.5 向表中添加记录
通过上面的操作我们已经成功地创建了数据库TELEBOOK和数据库中的一张表MYTELEBOOK,并且定义了表的字段的基本属性和一些字段的扩展属性。这时候的表还只是一个有了结构的空表,接下来要做的事情是往这个刚创建的表中加入一些数据,也就是记录,以后应用程序操作的对象一般都是表中的数据。
往一个表中加入数据有两种基本的方法,先介绍第一种方法,添加记录的过程如下:
1) 单击工具条上的DATA MANIPULATION(GRID)画板按钮,系统弹出了DATA
MANIPULATION窗口,注意到在窗口的上部显示的就是记录的格式,但每个字段不是用字段本身的名字,而是用字段扩展属性中的HEADER项,也就是题头来代表这个字段,这样做的好处是记录格式看起来比较直观清楚。通过DATA
MANIPULATION窗口就可以输入数据到表中。
2) 单击工具条上的INSER ROW按钮,窗口上出现一个空行用来输入一条记录,回忆前面我们定义了NUMBER字段的有效性检查规则,要求数据必须在1和1000之间,试着在编号栏中输入2000,然后用鼠标单击其它的字段,这时系统会弹出一个对话框告诉我们刚才输入到编号栏中的数据没有通过有效性检查(图2-14),单击确定后系统把输入焦点仍旧放在编号栏中让我们重新输入一个有效的数据。

图2-14
3) 输入编号为1,然后用TAB切换到姓名字段,输入姓名为“冯飞”,家庭地址输入为“南京市凤凰西街220号”,邮政编码输入为“210019”,工作单位输入为“南京市新街口百货商场”,电话号码输入为025-7984684,目前状况输入为“目前在复习英语,准备参加托福考试”,这样我们就输入了一条完整的记录到表中。
4)再次单击工具条上的INSERT ROW按钮,窗口上又出现一条空记录用来输入数据,用类似的方法依次输入记录的各个字段的值依次为“2”,“李明”,“杭州市浙江大学200号信箱”,“310027”,“浙江大学数学系高等数学教研室”,“0571-7996453”,“担任数学系副主任和总支副书记”,输好第二条记录后用同样的方法再输入第三条记录各项依次为“3”,“张玲”,“宁波市大榭开发区”,“330020”,“宁波市大榭开发区土地管理局”,“0574-5433216”,“担任土地管理局局长”,这样我们就完成了三条记录的录入工作,要注意的是此时输入的记录并没有真正存放到磁盘上去,而是暂时放在缓冲区中,单击工具条上的SAVE
CHANGES按钮,这样就把刚才输入的记录真正存放到了磁盘上相应的表中(图2-15)。
接下来介绍另外的一种数据输入方法,输入数据的过程如下:
1) 单击工具条上的DB ADMINISTRATION画板按钮,弹出一个标题为DATABASE
ADMINISTRATION的可编辑窗口,在这个窗口中可以输入SQL语句来往表中添加记录,不妨在其中输入一条标准的SQL语句为“INSERT
INTO MYTELEBOOK VALUES(4,‘王晓’,‘安徽天长市建设东路30号’,239300,‘安徽天长市水泥厂’,‘05507545450’,‘担任水泥厂厂长’);”(图2-16)。
2) 单击工具栏上的EXECUTE按钮,系统没有给出任何的反应,这表示INSERT语句已经提交给数据库管理系统并被成功地执行,如果输入的SQL语句有错的话,比如我们把上面INSERT语句括号中应该是整数的NUMBER项用一个字符串代替,然后单击工具条上的EXECUTE按钮,系统会弹出对话框提醒我们刚才输入的SQL语句有错,应该修改后再重新提交(图2-17)。
关闭DATABASE ADMINISTRATION窗口,单击工具条上的DATA MANIPULATION(GRID)画板按钮,弹出的窗口中的有一条记录就是刚才用SQL语句输入的记录(图2-18)。

图2-15
图2-16

图2-17

图2-18
到目前为止,我们成功地创建了一个数据库和它的一个表,表中有四条记录,当然你可以用本节介绍的方法往表中添加更多的记录。接下来将创建POWRBUILDER应用程序不可缺少的组成部分——应用对象。