有没有PB高手,想问一下关于pb的问题 图一,右击鼠标会显示pb 文本编辑器客户的信息。 图二,单击名称空白处

开放分类:
 PowerBuilder(Power Builder,PB)是著名的数据库应用开发工具生产厂商PowerSoft公司推出的产品(PowerSoft现已被数据库厂商Sybase所收购),它完全按照客户机/服务器体系结构研制设计,在客户机/服务器结构中,它使用在客户机中,作为数据库应用程序的开发工具而存在。由于PowerBuilder采用了面向对象和可视化技术,提供可视化的应用开发环境,使得我们利用PowerBuilder,可以方便快捷地开发出利用后台服务器中的数据和数据库管理系统的数据库应用程序。
(,)是著名的应用开发工具生产厂商PowerSoft公司推出的产品(PowerSoft现已被数据库厂商所收购),它完全按照客户机/服务器研制设计,在客户机/服务器结构中,它使用在客户机中,作为数据库应用的开发工具而存在。由于PowerBuilder采用了和可视化技术,提供可视化的应用开发环境,使得我们利用PowerBuilder,可以方便快捷地开发出利用后台服务器中的数据和的数据库应用。 在当前,网络技术迅速发展,随之发展的还有OLE,OCX,跨平台等技术,而在PowerBuilder的最新版中提供了对这些技术的全面支持。在数据库开发工具领域,PowerBuilder是其中非常优秀的一个,利用它我们可以开发出功能强大的数据库应用程序。PowerBuilder提供了对目前流行的大多数关系数据库管理系统的支持,由于在PowerBuilder的应用程序中对数据库访问的部分一般采用国际化标准数据库查询语言,使得用PowerBuilder开发的应用程序可以不做修改或者只做少量的修改就可以在不同的后台数据库管理系统上使用。也就是说用PowerBuilder开发的应用程序是独立于服务器上的数据库。
PB - PowerBuilder的特点
PowerBuilder提供了对目前流行的大多数关系数据库管理系统的支持,由于在PowerBuilder的应用程序中对数据库访问的部分一般采用国际化标准数据库查询语言SQL,使得用PowerBuilder开发的应用程序可以不做修改或者只做少量的修改就可以在不同的后台数据库管理系统上使用。也就是说用PowerBuilder开发的应用程序是独立于服务器上的管理系统的。和大多数的WINDOWS应用程序一样,PowerBuilder也是事件驱动工作方式。在这种工作方式中,程序的运行没有固定的流程,程序中的代码也是为各种可能发生的事件编写的,当程序开始运行之后,它就可以接受来自系统,用户或者其它应用程序触发的事件,然后执行相应的事件代码。事件驱动的工作方式与面向技术是紧密相关的,在PowerBuilder应用程序中,接受发生的事件的往往就是程序界面中的各种可视化对象。PowerBuilder是一种面向对象的开发工具,各种WINDOWS应用程序中常见的窗口、菜单、控件等在PowerBuilder中都是一个个的对象。在PowerBuilder中我们还可以创建自己的用户对象。特别要指出的是PowerBuilder提供了对中的各种技术的全面支持,我们可以利用面向对象方法中的对象的封装性、继承性、多态性等特点使得我们开发的应用程序具有极大的可重用性和可扩展性,而这一点正是中对应用程序所提出的重要目标。在当前,由于网络技术的发展,许多种不同的平台在INTERNET网上同时被使用,这对开发的应用程序的跨平台性提出了更高的要求,而PowerBuilder就提供了良好的跨平台性,比如在PowerBuilder中,利用WINDOWS平台开发的各种对象可以方便地应用到UNIX平台中,因为PowerBuilder支持对象的跨平台性。这样使得把应用程序从一个平台移到另一个平台变得并不复杂。为了给用户提供各个方面的支持,PowerBuilder具有自己的编程语言POWERSCRIPT,这个语言除了提供基本的流程控制语句,还提供了几百个函数来操纵各种对象和提供诸如DDE,OLE等方面的支持。此外我们还可以定义自己的函数,处理特定的事件。学习PowerBuilder时相当一部分的时间就是用来了解和熟悉PowerBuilder提供的各种函数。PowerBuilder一个很大的特点就是提出了数据窗口对象的概念。数据窗口对象也是PowerBuilder中的一种对象,与其它对象不同的是数据窗口对象是专门为了访问后台的数据库服务的,在数据窗口对象中我们定义了数据的来源和数据的显示风格,这样在应用程序中我们就可以把精力完全放在程序的??为我们在数据窗口对象中已经定义好了数据的来源。如果需要使用数据库中不同的数据也只要对数据窗口对象进行修改就可以了。特别要指出的是PowerBuilder在数据窗口对象中提供了丰富的数据显示方式,可以满足各种不同的需要。在PowerBuilder较新的版本中提供了基础库PFC,它为应用程序的开发提供了许多可重用的预定义类和对象,利用基本类库PFC可以快速开发出高质量重用性好的应用程序。真正发挥的巨大威力。最后要指出的是PowerBuilder有三个不同的版本,分别为DESKTOP型,PROFESSIONAL型,和ENTERPRISE型,DESKTOP型是为个人使用的桌面型应用程序,在这里可以利用PowerBuilder内置的数据库管理系统SYBASE SQL ANYWHERE来创建和使用本地数据库,为个人的应用服务;PROFESSIONAL型的PowerBuilder最重要的一点就是提供了对MICROSOFT (数据库标准连接接口)的支持,在PROFESSIONAL版本中我们就可以使用PowerBuilder的继承,多态等绝大多数特性;在ENTERPRISE版本中最重要的一点就是提供了对开发大型的数据库应用程序的全面的支持,提供了开发大型应用程序的许多辅助的工具,比如C++
BUILDER等。
PB - PowerBuilder编程技巧
1、数据的转储和调入功能的实现一个数据处理系统的安全性部分是整个系统的关键部分,对于一些需要长期保存的历史数据来说更是必不可少。对于现代的大型数据库管理系统来说,数据的安全性独立交给来专门管理,一般的系统较少涉及数据的备份工作。为了减少专业人员的负担,一个好的系统应该提供数据的转储和调入功能,这样对数据库管理系统不太了解的用户也可以进行数据安全方面的处理。PowerBuilder中SaveAs()、ImportFile()两函数可以实现这方面的操作,dwcontrol.SaveAs()提供了多种数据的存储格式,如dBase的DBF格式、以TAB作为分隔符的文本TXT格式、Excel格式、SQLInsert格式、CSV格式。dwcontrol.ImportFile()将数据从各种格式的文本中调入数据窗口控制里。2、简洁美观的数据报表的创建一个系统里的报表应该具有一致的风格,报表至少应该具有如下几种项目:报表的标题、报表的日期和时间、报表的页序、报表涉及的对象和条件。PowerBuilder提供了各种类型的数据窗口,报表中主要用到如下几种类型: Free风格,该数据窗口的数据排列,用户可以任意调整,有最大的自由性。Grid风格,以表格的方式显示数据,外观比较工整,美观明了。Graph风格,以图形方式显示数据,有直方格、圆饼图、曲线图、三维立体柱图。Group风格的数据窗口提供了一种对数据进行分组的简便途径,它生成了一个具有分组属性的Tabular风格的数据窗口对象。3、Mdi窗体技术的应用随着Windows系统的出现,图形交互界面得到了用户的喜爱,已成为一种潮流,其中Mdi窗体技术更是吸引人。Mdi窗体,即是多文档交互式窗体,亦叫无窗体。这种窗体包括一个Mdi主窗口及多个Mdi子窗口,子窗口只能在之内出现和移动,可以同时打开多个Mdi子窗口,但同一时刻只能有一个窗口处于被激活状态,当主窗口关闭时,同时关闭所有子窗口。4、SQL语句的使用在用PowerBuilder编程时经常要使用SQL语句对数据库进行操作,而SQL语言语句在使用中格式要求比较严格。此外,在使用SQL语句之前,要用Connect与数据库相连,并且每一条SQL语句必须以“;”结尾。5、Datawindow数据窗口数据窗口的处理机制首先是根据所需的显示方式将数据源表中的域设计好,在运行时将所要的数据从数据库服务器上下载到客户机上处理,然后将更改后的数据进行提交(Commit)或回滚(Rollback)。这种处理机制大大降低了数据的传输量,减轻了的负担,也提高了数据的处理速度。充分利用数据窗口的特点,可达到事半功倍的效果,但是如果有些问题不加注意就会出现意想不到的错误。(1). AcceptText()函数AcceptText()函数的功能是将数据窗口当前编辑的数据转移到数据窗口的缓冲区中。程序通常在关闭窗口及其他情况下判断是否改变了当前数据。如果已改变数据,应提示用户保存。这就杜绝了用户在偶然的情况下丢失更改数据的现象。一般用ModifiedCount和DeletedCount函数判断数据是否改变。PB在处理数据窗口时,对应开辟了四个数据缓冲区,分别为Primary Buffer、Deleted Buffer、Filter Buffer、SortBuffer,其中Deleted Buffer存放被删除的记录,Filter Buffer存放被过滤的记录,Sort Buffer存放排序的记录,Primary Buffer存放其他记录。函数ModifiedCount从Primary and Filter Buffers中取数据进行判断,DeletedCount则从Deleted Buffer中取数据进行判断。PB在接受用户输入时设置了一个浮动编辑框,用户输入或更改的内容并不直接进入Primary Buffer,而是在用户输入完后进入下一个域时,PB首先对它进行有效性检测,通过后转入Primary Buffer。如果只改变一项数据就关闭窗口则相关数据并没有进入Primary Buffer,系统判断ModifiedCount()为0,所以不会提示保存数据。用AcceptText()函数就可以将浮动编辑框中的数据转入缓冲区中,在相应的程序段前加上Accepttext(),问题就解决了。(2).messagebox()函数messagebox()是Powerscript中用得最多的函数之一,常用于向用户显示出错、警告及其它信息,并且在开发过程中常用它显示程序状态和重要变量的取值,它在程序运行过程中,在屏幕上显示一个窗口,只有用户在响应该窗口后,程序才能继续运行下去,因此,这个函数在程序的开发调试过程中非常有用,可以用来判断程序在哪个地方出错。&6、数据的突出显示程序运行中,用户希望显示的数据具有明显的区分,数据窗口应该能使用户很快找到他们想要的信息,以颜色区分既满足用户的习惯,又不占系统资源,实现起来也很简单。以学生管理为例,要求成绩低于60分的以红色显示,其他不变。方法是:在数据窗口中对应成绩的列(例如‘/cj’)上双击鼠标左键或单击鼠标右键,弹出Column 对话框,选取Expressions页,在Color后的框中输入:if(cj&60,rgb(255,0,0),rgb(192,192,192))此句表示当成绩小于60则显红色,否则灰色显示。IF语句只可能有两种选择,如果要更多的条件判断则必须用CASE语句,例如成绩大于等于90用蓝色,小于60用红色,其他用绿色则应该用以下语句:Case(cj WHEN IS &=90 THEN RGB(0,0,255) WHEN IS & 60 THEN RGB(255,0,0) ELSE RGB(0,255,0))。图形是最好的说明语言,为了更好体现数据的直观性,可以采用条件位图的方法。之所以称为条件位图,是因为它随数据的性质而决定是否显示,用可以在上述的成绩管理数据窗口的前面加上一个图片。双击位图,弹出Picture Object对话框,选Expressions页,在Visible编辑框写入if(xb=”0”,1,0),此句的意义为当性别为0(女)时蝴蝶出现,否则蝴蝶消失,程序运行起来相当直观,充分利用列的属性使用户的界面更加友善、漂亮。7、数据的保护&有很多情况需要对数据进行保护(即只能显示而不允许修改),学生查询成绩时就是这种情况。进行数据保护的方法有很多,第一种是双击要保护的列,弹出Column Object,选取Edit页,将Display Only框选中;第二种将要保护的列的TabOrder置0,则此列得不到焦点,当然就无从修改;第三种是从根本作起,选取Rows菜单,再选取Update Properties,弹出Specify Update Properties对话框,将Allow Updates设为空,这样即使用户更改了也无法更新数据库,使更改毫无意义。8、数据窗口的多表更新在处理数据时,经常需要将几个表中的数据放入一个数据窗口中进行处理。一般情况下多表数据源的数据窗口只能用于数据的检索,而不能更新。想要更新数据则采用的方法为:创建数据窗口(将各个表的主键包括进去),修改Taborder使数据能被更改,然后对应各个表创建相应的隐含数据窗口,隐含数据窗口的数据项和主数据窗口中对应表的数据项应完全一致。存盘时将主数据窗口中的数据拷贝到相应的隐含数据窗口中去,逐个保存各隐含数据窗口中的数据即可。由此看来,第二种方法更容易理解和接受,实现起来也很简单。
PB - PowerBuilder 入门
创建新的数据库为了使您尽快了解PowerBuilder的基本工作原理和编程环境,我们以一个完整的数据库应用程序的开发为例,通过对其开发过程的详细介绍,让您对PowerBuilder有一个基本的认识,为以后的深入学习打基础。数据库应用程序的操作对象是数据库里的数据,应用程序的目的就是给用户提供一个良好的界面,使得用户能够方便有效地使用数据库中的数据,可见数据库是应用程序工作的基础,所以我们就先了解数据库的创建。PowerBuilder作为一种数据库应用程序的开发工具,一般访问的是后台服务器上的大型数据库。但是PowerBuilder自身也带有本地的数据库管理系统SYBASE SQL ANYWHERE,利用它我们可以创建本地的数据库,由于利用ODBC接口来实现应用程序和远程数据库或本地数据库的连接在操作上并没有太大的区别,下面我们利用PowerBuilder自带的数据库管理系统SYBASE SQL ANYWHERE来创建本地数据库。双击屏幕上的PowerBuilder 5.0图标,就可以启动PowerBuilder,图2-1显示的就是PowerBuilder的初始界面,可以看出,PowerBuilder的界面同其它WINDOWS 应用程序的界面是类似的,也是由菜单、工具条、工作区和状态条等部件组成。PowerBuilder工具条上的一个个图标被称为画板按钮,按下这些按钮可以打开相应的画板。利用这些画板我们可以创建各种对象,应用到PowerBuilder开发的应用程序中去。如果你对某个画板按钮的功能不太清楚,将鼠标放在这个按钮上不动,系统会在画板按钮的旁边显示一条简短的语句,说明此画板按钮的功能,另外也可以从按钮上的图标来识别它的功能。图 2-12.1.1 创建新的数据库创建一个新的数据库的过程如下:1) 单击工具条上的画板按钮,利用它来创建新的数据库,单击后屏幕上弹出一个标题为SELECT TABLES的对话框(图2-2),让我们选择表,这些表是系统当前所连接的数据库中的表,因为我们现在是要创建新的数据库,所以单击对话框的CANCEL按钮关闭这个对话框,接着屏幕上显示的是一个完整的数据库画板窗口,窗口的标题显示的是系统当前所连接的数据库的名字。图 2-22) 单击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.保存在磁盘上。观察一下数据库窗口的标题,可以发现系统已经自动把新创建的TELEBOOK数据库作为系统当前所连接的数据库(图2-4)。图 2-3 图 2-42.1.2 向数据库中添加表数据库是一个容器,其中存放的是一个个的表。接下来我们就来为刚建的TELEBOOK数据库创建表,创建表的过程如下:1) 单击工具条上的CREATE TABLE画板按钮,就弹出了标题为CREATE TABLE的对话框(图2-5),利用这个窗口我们就可以生成定义一张表所需要的各项信息图 2-5 2) 一个表是由很多的字段组成的,接下来开始定义表的各个字段了。注意COLUMN NAME一项,它是用来输入表的字段的名字。这里输入第一个字段的名字为NUMBER,代表一个人在通讯录中的编号。单击DATA 一栏的下拉箭头,从中选择当前字段的数据类型,不妨把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-82.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,, 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”,“浙江大学数学系高等数学教研室”,“”,“担任数学系副主任和总支副书记”,输好第二条记录后用同样的方法再输入第三条记录各项依次为“3”,“张玲”,“宁波市大榭开发区”,“330020”,“宁波市大榭开发区土地管理局”,“”,“担任土地管理局局长”,这样我们就完成了三条记录的录入工作,要注意的是此时输入的记录并没有真正存放到磁盘上去,而是暂时放在缓冲区中,单击工具条上的SAVE CHANGES按钮,这样就把刚才输入的记录真正存放到了磁盘上相应的表中(图2-15)。图 2-15 接下来介绍另外的一种数据输入方法,输入数据的过程如下:1)单击工具条上的DB ADMINISTRATION画板按钮,弹出一个标题为DATABASE ADMINISTRATION的可编辑窗口,在这个窗口中可以输入SQL语句来往表中添加记录,不妨在其中输入一条标准的SQL语句为“INSERT INTO MYTELEBOOK VALUES(4,‘王晓',‘安徽天长市建设东路30号',239300,‘安徽天长市水泥厂',‘',‘担任水泥厂厂长');”(图2-16)。图 2-16 2)单击工具栏上的EXECUTE按钮,系统没有给出任何的反应,这表示INSERT语句已经提交给数据库管理系统并被成功地执行,如果输入的SQL语句有错的话,比如我们把上面INSERT语句括号中应该是整数的NUMBER项用一个字符串代替,然后单击工具条上的EXECUTE按钮,系统会弹出对话框提醒我们刚才输入的SQL语句有错,应该修改后再重新提交(图2-17)。 图 2-17 关闭DATABASE ADMINISTRATION窗口,单击工具条上的DATA MANIPULATION(GRID)画板按钮,弹出的窗口中的有一条记录就是刚才用SQL语句输入的记录(图2-18)。 图 2-18 到目前为止,我们成功地创建了一个数据库和它的一个表,表中有四条记录,当然你可以用本节介绍的方法往表中添加更多的记录。接下来将创建POWRBUILDER应用程序不可缺少的组成部分 —— 应用对象。2.2 创建应用对象 应用对象是PowerBuilder应用程序的基础,通过它可以设置有关应用程序的全局信息,例如应用程序的名字,程序使用的图标,程序中文本的字体,应用程序所在的对象库等各种信息。在以后将详细介绍如何设置应用程序的这类信息。要记住的很重要的一点是应用对象是PowerBuilder应用程序执行时的入口点。下面我们就开始创建一个新的应用对象。1)单击工具条上的APPLICATION画板按钮,系统弹出一个标题为APPLICATION的窗口,每次启动PowerBuilder后系统都会自动打开前一次的应用对象。下面我们将要创建一个新的应用对象。2)打开FILE菜单,单击其中的NEW菜单项,屏幕上弹出一个名为SELECT NEW APPLICATION LIBRARY的对话框,用于设置把应用对象保存到哪个库文件中。应用程序对象库实际上是一个特殊格式的文件,用于存放应用程序所用到的各种对象。应用程序本身作为一个对象自然要放到对象库中。这里我们创建一个新的对象库,首先设置对象库的存放路径为D:\DATABASE,在文件名一栏中输入对象库的名字为TELEPHONE-BOOK(图2-19),然后单击保存按钮。图 2-193)系统又弹出一个名为SAVE APPLICATION的对话框,用于给应用对象自身起一个名字,为方便记忆,同样给它起名为TELEPHONE-BOOK,对话框下部的注解栏用于输入有关这个应用对象的一些信息,以后重新打开这个应用对象时可以有一个大概的了解。4)单击OK按钮,系统就创建了一个名为TELEPHONE-BOOK的应用对象和它所在的名为TELEPHONE-BOOK.PBL的对象库。系统弹出一个对话框询问是否需要由PowerBuilder为我们生成一个应用程序的模板(图2-20),所谓应用程序的模板就是应用程序基本框架,这个框架中含有一些应用程序可能用到的基本对象,利用这个框架可以更好更快地开发应用程序。当然也可以不用这个模板而直接编写应用程序,这里选择“否”不让系统生成应用程序的基本框架,而是由我们自己一步步创建应用程序,以使你对PowerBuilder应用程序的开发过程有一个更深刻的了解。图 2-205)单击工具条上的LIBRARY画板按钮,可以发现创建的应用对象TELEPHONE-BOOK出现在我们刚刚创建的对象库TELEPHONE-BOOK.PBL中(图2-21)。图2-212.3 创建第一个窗口窗口在WINDOWS应用程序中是一个极为重要的概念,它提供了应用程序同用户之间交互的非常直观的界面,目前许多的WINDOWS下的开发工具都提供了可视化开发窗口对象的方法,使得开发一个窗口对象变得非常容易,PowerBuilder也不例外,下面就开始创建这里的应用程序中要用到的两个窗口。 首先来创建第一个窗口对象,创建一个窗口的一般步骤如下: 单击工具条上的WINDOW画板按钮,系统弹出一个题为SELECT WINDOW的对话框,用来选择当前对象库中已存在的窗口对象(图2-22)。 图 2-22 单击对话框的NEW按钮来创建一个新的窗口对象。单击后屏幕上弹出一个题为WINDOW的窗口,接下来就可以往这个窗口中添加需要的控件了。 单击PAINTERBAR工具条上的控件画板按钮,系统弹出一个方框,其中包含有各种各样的可用控件(图2-23),选中其中的一个,在窗口上单击,就可以把选中的控件放到窗口中。这里首先从方框中选择STATICTEXT控件,然后在窗口中单击,就会发现一个静态文本框空间就出现在窗口中,再次单击工具条上的控件画板按钮把第二个静态文本框控件放到窗口中,用类似的方法把一个SINGLE LINE EDIT控件,也就是单行编辑框放到窗口中,最后再把一个COMMAND BUTTON控件,也就是命令按钮放到窗口中。 图 2-23 为了使窗口更美观一点,可以对已放入窗口中的控件调整位置和改变一些特性,单击第一个静态文本框选中它,然后放到合适的地方,在上面单击右键,在弹出的菜单中选择PROPERTIES菜单项,系统弹出一个对话框用来设置这个控件的属性(图2-24),NAME栏显示的是控件的名字,这个名字是用在以后编写的脚本中,系统已经设置了一个缺省的名字,这里不作修改,接下来的TEXT一栏是用来设置显示在静态文本框中的文本,这里把它改为“个人通讯录管理系统”,设好后单击OK按钮,用类似的方法把调整另外一个静态编辑框的位置,并把上面的文字改为“请输入你的使用口令:”,然后激活单行编辑框,调整好它的位置后把鼠标放在它的右边框上等鼠标变成水平双箭头形状的时候单击并拖动鼠标,把编辑框拉长一些;最后调整命令按钮的位置并把上面的标题修改为“OK”。用鼠标右键单击窗口中没有控件的空白区域,然后在弹出的菜单中选择PROPERTIES菜单项,在弹出的对话框中把TITLE一栏改为“个人通讯录”,然后单击“OK”按钮关闭对话框。 图 2-24 单击工具条上的PREVIEW按钮可以预览设计好的窗口(图2-25),窗口的标题就是我们刚在窗口的TITLE属性中输入的值。关闭预览窗口,这样我们就定义好了第一个窗口对象,需要给它起一个名字,单击FILE菜单的SAVE菜单项,弹出一个题为SAVE WINDOW的对话框,在WINDOWS一栏中给窗口起一个名字为 TELEPHONE-WINDOW1, 这个明字将用于以后的程序中,输好后单击OK按钮,可以发现窗口的标题已变成刚输入的名字,到此为止第一个窗口就设计好了。 图 2-25&2.4 创建数据窗口对象在创建第二个窗口对象之前,我们需要先来创建两个数据窗口对象。数据窗口对象是PowerBuilder的一大特色,它为我们操作数据库中的数据提供了一种直观有效的手段,利用它可以方便地联结数据库,以自己喜欢的方式显示数据库中的数据以及修改数据库。下面就开始创建第一个数据窗口对象。 单击工具条上的DATAWINDOW画板按钮,系统弹出一个名为SELECT DATAWINDOW的对话框,用以选择已存在的数据窗口对象或者创建新的数据窗口对象(图2-26)。 图 2-26 这里来创建一个新的数据窗口,单击NEW按钮,在弹出的NEW DATAWINDOW对话框中有DATA SOURCE 和PRESENTATION STYLE两个组合框(图2-27),分别用来选择要创建的数据窗口的数据来源和显示样式,关于这些选项的含义在以后的内容中再详细介绍,这里选择数据源为QUICK SELECT,即简单查询型,数据显示样式选择GRID,即网格型。 图 2-27 单击OK按钮,系统弹出一个名为QUICK SELECT对话框用于对数据源进行配置(图2-28),在TABLES栏中选中先前创建的表MYTELEBOOK,这时在COLUMNS栏中显示出MYTELEBOOK表中的所有的字段,让我们从这些字段中选择其中的一些,这样做是考虑到用户在大多数时候可能只对表中的某些字段感兴趣,没必要在提供给用户的界面上显示出记录的所有的字段。目前创建的这个数据窗口是用来浏览通讯录的大致情况,所以只选中NUMBER,NAME TELEPHONE三个字段,选好后在对话框的下部显示出这三个字段,在每一个字段的下面又有三个选项,单击NUMBER字段下的SORT选项框,在弹出的下拉框中选择ASCENDING选项,这表示以后在数据窗口中显示数据的时候按编号字段从小到大的顺序显示记录, 以便于查看。其它的选项我们不作改动。 图 2-28 单击OK按钮,这样就为数据窗口设好了数据源,系统弹出的标题为DATAWINDOW的窗口中显示出的三个字段就是刚才选中的字段(图2-29),可以看出DATAWINDOW窗口被划分成了四个带状区域,这四个区域的大小和内容都是可以设计的,在HEADER区域中系统已经自动放好的就是我们为每个字段设定的题头,HEADER中的内容以后将显示在数据窗口中。单击左边工具条上的PREVIEW预览按钮,窗口中显示出预览的结果,数据库中的数据也自动按编号字段从小到大的顺序显示在网格中(图2-30)。 图2-29 图 2-30 接着为设计好的数据窗口对象起一个名字,双击DATAWINDOW窗口的左上角,弹出一个对话框询问是否保存设计结果,选择“是”后出现SAVE DATAWINDOW对话框,在DATAWINDOWS一栏中给设计好的数据窗口起名为TELE-DATAWINDOW1,确定在APPLICATION LIBRARIES选中的是TELEPHONE-BOOK 1.PBL ,然后单击OK按钮,就完成了第一个数据窗口对象的创建。 再次单击POWERBAR工具条上的DATAWINDOW画板按钮,来创建第二个数据窗口对象,这个数据窗口用来显示在第一个数据窗口中选中的某个记录的详细信息。类似地,在弹出的对话框中选择NEW按钮,在NEW DATAWINDOW对话框中数据源选为SQL SELECT,即标准的SQL查询方式,数据显示方式这次设置为FREEFORM,即自由表格形式,它的特点是数据窗口中显示的每条记录的字段纵向排列,看起来比较清楚,选好后单击OK按钮,接下来弹出的对话框中同样选中MYTELEBOOK表后单击OPEN按钮,窗口中显示出表的所有字段,这次选中它的所有字段,可以发现在窗口下部的工作区中显示出自动生成的SQL语句,单击下部的SORT标签,单击并拖动NUMBER字段到右边的方框中,旁边出现的复选框表示已经把NUMBER字段按上升排序。单击DESIGN菜单,选中其中的RETRIEVIAL ARGUMENTS菜单项,弹出的对话框用来定义SQL 语句的搜索参数(图2-31),在NAME栏中给参数起名为NUMBER-SEARCH,TYPE就选择为NUMBER类型,然后单击OK按钮,就定义好了搜索参数。单击窗口下部的WHERE标签,单击COLUMN栏后选择NUMBER字段,OPERATOR栏就选择“=”号,VALUE栏中输入冒号加刚才定义的搜索参数NUMBER-SEARCH,然后单击PAINTERBAR工具条上的SELECT画板按钮,就定义好了数据窗口的数据源的具体格式。 图 2-31 单击左边PAINTER BAR工具条上的PREVIEW按钮,弹出一个对话框用来输入刚才定义的搜索参数的值(图2-32),这里不妨输入1,确定后窗口中就显示出表TELEBOOK中的NUMBER的值为1的记录。选择PAINTERBAR工具条上的EXIT按钮,弹出的对话框询问是否保存数据窗口,单击“是”后,在弹出的对话框中给数据窗口起名为“TELE-DATAWINDOW2”,确定在APPLICATION LIBRARIES选中的是TELEPHONE-BOOK 1. PBL对象库,然后单击OK按钮,就完成了第二个数据窗口对象的创建。 图 2-322.5 创建第二个窗口对象在创建了两个数据窗口对象后我们来创建第二个窗口,把数据窗口对象应用到窗口中去。 单击POWERBAR工具条上的WINDOW画板按钮,在对话框中选择NEW按钮来定义一个新的窗口。 单击PAINTERBAR工具条上的控件画板按钮,在弹出的方框中选择DATAWINDOW控件,再在窗口中单击把它放到窗口中,这里要提醒一点的是这里的DATAWINDOW控件与前面定义的数据窗口对象是两个不同的概念,这里的DATAWINDOW控件相当于一个容器,是用来存放数据窗口对象的。这里的数据窗口控件的作用是显示出数据库中所有记录的主要信息,所以可能在一个窗口中显示不,在弹出的菜单中选择PROPERTIES菜单项,在弹出 的对话框中选中VSCROLL BAR复选框,就为数据窗口控件在以后显示数据的时候提供了一个垂直滚动条,以便可以利用滚动条看到数据窗口中的所有的记录。 用和放入第一个数据窗口控件类似的方法在窗口中放入第二个数据窗口控件,然后再在窗口中放入四个COMMANDBUTTON控件, 鼠标右键单击激活窗口中的第一个DATAWINDOW控件,在弹出的菜单中选择PROPERTIES菜单项,弹出DATAWINDOW对话框,系统已经自动为这个控件起名为DW-1,这里就用这个名字,单击BROWSE按钮开始为控件定义它所联结的数据窗口对象,在弹出的SELECT DATAWINDOW对话框中选择数据窗口为TELE-DATAWINDOW1,然后单击OK按钮,可以发现在DATAWINDOW对话框的DATAWINDOW OBJECT NAME一栏中出现了刚选中的数据窗口对象(图2-33)。 图 2-33 单击OK按钮,第一个数据窗口控件中显示的就是它所联结的数据窗口对象的结构。 用类似的方法为第二个数据窗口控件联结刚才定义的数据窗口对象TELE-DATAWINDOW2,联结好之后把四个命令按钮控件上的文字分别改为“插入”,“删除”,“更新”和“关闭”,而它们的名字则分别修改为“CB-INSERT”,“CB-DELETE”,“CB-UPDATE”,“CB-COLSE”。 接下来调整窗口的大小和窗口上的每个控件的位置和大小,要注意的是要使得数据窗口控件中的数据窗口对象的每一个字段都能在控件中看得到。调整好之后可以单击PAINTERBAR工具条上的PREVIEW按钮预览一下窗口的样子(图2-34)。设计好窗口以后单击PAINTERBAR工具条上的SAVE按钮,弹出SAVE WINDOW对话框用来给窗口起一个名字,给它起名为TELEPHONE-WINDOW2,确定对话框下部的对象库是TELEBOOK .PBL 后单击OK 关闭对话框。这样就定义好了第二个窗口对象。 图 2-342.6 建立应用程序到目前为止,本程序中用到的对象都定义好了,但程序还不能运行,因为我们还没有为程序编写代码,这种代码在PowerBuilder中被称为脚本,PowerBuilder是一种基于面向对象的事件驱动机制开发工具,所以脚本也是针对对象的事件来编写,接下来就为应用程序编写脚本。 PowerBuilder应用程序的特点是从应用对象开始执行程序,所以我们首先要做的是为应用对象的打开事件编写代码,单击POWERBAR工具条上的APPLICATION画板按钮打开应用对象,然后单击PAINTERBAR工具条上的SCRIPT画板按钮,系统弹出SCRIPT对话框用来为应用对象编写脚本,从SELECT EVENT下拉列表框中选择OPEN事件,然后在工作区中输入如下脚本(图2-35): SQLCA.=PROFILESTRING("PB.INI","DATABASE","DBMS","") SQLCA.DBPRAM=PROFILESTRING("PB.INI","DATABSE","DBPRAM","") OPEN(TELEPHONE-WINDOW1) 图 2-35 解释这段脚本前要先介绍事务对象的概念,这里的SQLCA就是一个系统自动提供的缺省事物对象变量,SQLCA是一个全局变量,可以用在所有的窗口对象中。事物对象的作用是为联结数据库提供有关的信息,以便可以从数据库中获取需要的数据。这段脚本所做的工作是在应用对象启动后首先从POWERBUIDER中存放与数据库有关信息的文件PB . INI中取得需要的值放入事物对象变量中,然后打开TELEPHONE-WINDOW1窗口,以便用户从登录窗口输入正确的密码后可以进入到个人通讯录管理系统。这里就为应用对象编写这三行代码。 单击POWERBAR工具条上的WINDOW画板按钮,选择打开TELEPHONE-WINDOW1,我们开始为它编写脚本,右键单击窗口上的OK按钮,首先在菜单中选择PROPERTIES菜单项来修改OK控件的一个属性,在弹出的对话框中有一个DEFAULT复选框,我们选中它(图2-36),这样在以后程序运行的时候按回车键的效果和单击OK控件就一样了,单击OK关闭对话框,然后再次右键单击窗口上的OK按钮,在菜单中选择SCRIPT菜单项开始为这个命令按钮的单击事件编写脚本,观察窗口的标题确定目前选择的是命令按钮的CLICK事件后在工作区中输入以下的脚本: if upper(trim(sle_1.text))="mypassword" then open (telephone_window2) close(telephone_window1) else sle_1.setfocus() end if 这段脚本所做的工作是当用户在打开的登录窗口中单击OK按钮的时候判断单行编辑框中的字符串在去掉前后的空格符和整个转换成大写字符后是否为字符串“MYPASSWORD”,如果是的就打开我们在前面定义的第二个,也就是用来对个人通讯录数据库进行操作的窗口,然后再关闭登录窗口, 如果输入的字符串与设定的字符串“MYPASSWORD”不符的话就表示用户不能对通讯录数据库进行访问,就把输入焦点切换到编辑框让用户重新输入正确的口令,这里我们把口令设成了“MYPASSWORD”,在实际应用中你可以换成一个自己的口令,这样可以保证自己的数据库的安全性。 图 2-36接下来我们为第二个建立的窗口,也就是真正对数据库进行操作的窗口编写脚本,这里的脚本是真正完成对数据库中数据的修改。首先要为窗口的打开事件编写脚本,也就是在窗口打开后需要干什么事。用类似打开第一个窗口的方法打开第二个窗口,用鼠标右击窗口中的空白区域,在弹出的菜单中选中SCRIPT菜单项,系统弹出一个用来为窗口本身所有可能的事件编写脚本的窗口,选中窗口的打开事件后在窗口的工作区中输入如下脚本: CONNECT; DW-1 .SETTRANSOBJECT ( SQLCA ) DW-1 . RETRIEVE() DW-2 . SETTRANSOBJECT(SQLCA) 脚本的第一条语句的意思是用刚才介绍的系统缺省的事物对象SQLCA联结数据库。第二行脚本的意思是告诉数据窗口控件DW-1中的数据窗口对象利用事物对象SQLCA来取得数据库的有关信息。而第三条语句的意思是让数据窗口控件中的数据窗口对象,要利用创建该数据窗口对象时的SELECT语句来获得数据显示在相应的数据窗口控件中。第四行语句的作用和第二行语句的作用是类似的,是告诉数据窗口控件DW-2所联结的数据窗口对象从系统缺省的事物对象SQLCA中获取有关数据库的信息。这样我们就为对数据库进行操作的窗口的打开事件编好了脚本,要指出的是可以发现这里的脚本都是做一些窗口被打开后必须做的事情,即初始化工作。 接下来我们为窗口中的控件编写脚本,首先为数据窗口控件DW-1的鼠标单击事件编写脚本,脚本要达到的目的是当用鼠标单击数据窗口控件DW-1中显示出来的某条记录时,关于这条记录的详细信息将显示在数据窗口控件DW-2中。鼠标右击数据窗口控件DW-1,在弹出的菜单中选择SCRIPT菜单项,系统弹出编写脚本的窗口,从SELECT EVENT下拉列表框中选择事件为CLICKED,然后在工作区中输入如下脚本: int recordnumber int currentnumber recordnumber=dw_1.getclickedrow() if recordnumber=0 then messagebox( "this is a message","not valid row, please close this dialog and click a valid row in dw_1") else correntnumber=dw_1.getitemnumber(recordnumber,1) dw_2.retrieve(currentnumber) end if 这是一段很重要的脚本,深刻理解这段脚本对你以后的编程会有很大的帮助的。脚本的前两行是定义了两个整型的变量,第三行脚本的意思获取被用户用鼠标单击的那行记录的行号,也就是第几个记录,并把这个值放在变量RECORDNUMBER中,如果用户虽然单击了数据窗口控件DW-1,但单击的是没有数据的地方,这时函数返回的行号就为零,表示用户单击的不是一条有效的记录。从第四条语句一直到最后是一个IF条件语句,它的作用是判断用户单击的是否是一条有效的记录行,如果不是的就弹出一个对话框告诉用户刚才单击的不是一条有效的记录行,并让用户关闭这个对话框后在数据窗口控件DW-1中单击选中一个有效的记录行。如果IF条件语句判断用户单击的是一条有效的记录行,就从这行所对应的记录中取出第一个字段NUMBER的值,并把这个值放入变量CURRENTNUMBER中,然后把变量CURRENTNUMBER作为数据窗口控件DW-2所联结的数据窗口对象TELE-DATAWINDOW2定义时的搜索参数的值,使用RETRIEVE函数把对应的记录从数据库中取出来显示在数据窗口控件DW-2中。可以看出这段脚本实现了两个数据窗口之间的简单通讯。 接下来我们为窗口中最下面的四个命令按钮分别编写脚本。首先看“插入”按钮,用和前面类似的方法打开“插入”按钮的事件编写窗口,选中CLICKED事件,开始输入下面的脚本: dw_2.reset( ) dw_2.insertrow(0) 这段脚本只有两句 , 第一条语句的意思是清除数据窗口控件DW-2中的已有记录,即使得数据窗口控件中没有任何内容。第二条语句的作用是向数据窗口控件所联结的数据窗口对象中加入一条新的记录。 再为“删除”按钮编写脚本,用和前面类似的方法打开“删除”按钮的事件编写窗口,选中CLICKED事件,始输入下面的脚本: dw_2.deleterow(0) 这段脚本就一条语句,它的作用是调用PowerBuilder提供的函数DELETEROW来删除数据窗口中的一行记录,这里函数中的参数0表示将被删除的是当前行的记录。 接着为“更新”按钮编写脚本,,打开“更新”按钮的事件编写窗口,选中CLICKED事件,开始输入下面的脚本: if dw_2.update( )=1 then
dw_1.retrieve( ) else
end if 这段脚本是一条完整的条件语句,首先使用UPDATE函数根据数据窗口控件DW-2所联结的数据窗口对象的变化真正地修改数据库,然后判断修改是否成功,如果成功的话就提交结果并让数据窗口控件DW-1所联结的数据窗口对象重新从数据库中取得数据,以使得数据窗口中的数据能和数据库中的数据保持一致,如果条件语句判断出修改失败的话就使用ROLLBACK语句使得数据库恢复到修改以前的状态。 最后我们来编写 “关闭”按钮的脚本,这个按钮的作用是用来关闭我们的应用程序,打开“关闭”按钮的脚本编写窗口,选中CLICKED事件,开始输入下面的脚本: close(parent) 这段脚本的意思是关闭命令按钮所在的父窗口。 到目前为止,我们的应用程序就完成了对象的创建和应用程序脚本的编写 , 接下来将运行这个应用程序,来验证它是否和我们需要的结果一致。2.7 运行应用程序首先从FILE菜单中选择SAVE菜单项来保存我们上面所做的事情,然后关闭所有的窗口,从POWERBAR工具条中单击RUN按钮,系统开始运行我们的应用程序,先弹出的是“个人通讯录管理系统”的登录窗口(图2-37),编辑框是用来输入你的口令,只有口令正确后才可以进入数据操作窗口来浏览和修改你的通讯录中的数据。如果输入一个错误的口令“ERROR”,然后单击OK按钮,可以发现系统没有反应,只是把输入焦点重新切换到编辑框让你重新输入口令,输入正确的口令“MYPASSWORD”后回车,系统关闭登录窗口进入数据操作窗口(图2-38),左边的数据窗口控件中显示的就是通讯录数据库中的所有记录的主要字段的值,单击其中的某个记录,这个记录的详细信息就会显示在右边的数据窗口控件中(图2-39),如果我们单击左边数据窗口上的非记录区域,比如标题栏,可以发现系统弹出一个对话框,其中的内容告诉我们刚才单击的不是一条有效的记录行,这个对话框正是我们自己设计的对话框(图2-40) 。 单击“确定”按钮关闭框,接下来我们插入一条记录,单击“插入”按钮,程序在右边的数据窗口中显示出一条新的记录用来输入记录数据,我们在新记录的各项中依次输入“5,薛明,江苏南京,210001,南京大学物理系,,目前担任系主任”,输好后单击“更新”按钮,新记录就本插入到数据库中,可以发现在左边的数据窗口中也多了一条刚输入的新记录。在左边数据窗口中鼠标单击入的新记录,然后单击“删除”按钮,这条记录就从右边的数据窗口中删除了,但此时的记录并没有真正从数据库中删除掉,再单击“更新”按钮,这条记录就真正从数据库中删除了,可以发现这时左边的数据窗口中也少了这条记录。对于数据的操作就演示到这,单击“关闭”按钮 , 应用程序就被终止,系统又回到了POWERBUILER的开发环境下。 图 2-37 图 2-38 图 2-39 图 2-40
为您提供感兴趣的词条
GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文件格 GIF式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压...
GWT - 产品概述
如今,编写网络应用程序是一个单调乏味且易于出错的过程。开发人员可能要花费 90% 的时间来处理浏览器行话。此外,构建、重复使用...
OGRE(Object-Oriented Graphics Rendering Engine,即:面向对象图形渲染引擎)是一个用C++开发的面向场景、非常灵活的3D引擎,它旨在让开发人员更容易、更直接地利...
ThinkDesign - ThinkDesign简介
think3创建于1979年,公司最初的名字是Cad.Lab,她是一家具有深远影响的Cad和Plm市场的竞争者。基于30多年的欧洲成熟经验,thin...
UG(Unigraphics NX)是EDS公司出品的一个产品工程解决方案,它为用户的产品设计及加工过程提供了数字化造型和验证手段。Unigraphics NX针对用户的虚拟产品设计...
VB - Visual Basic编程语言
vb简介1991年,美国微软公司推出了Visual Basic(可间称VB),目前的最新版本是VB 2005(VB8)中文版。Visu...
版权所有 Copyright 2013 All rights reserved. &联系QQ:

我要回帖

更多关于 pb 文本编辑器 的文章

 

随机推荐