




已阅读5页,还剩176页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 引言 power builder(以下简称pb)是广泛使用于c/s体系 结构下的面向对象的数据库应用程序的客户端开发工具。 其优秀的面向对象特性,特别是其具有一个功能强大的智 能对象数据窗口,使得开发人员利用它操作关系数据库 时无需编写sql语句,能迅速简单地建立复杂的图形应用 ,来访问本地或网络服务器上的数据库数据。同时它也可 用于分布式和b/s体系结构的应用程序的开发。 数据库应用系统开发工具pb 2 学习要求 应用程序的体系结构; 利用pb开发数据库应用程序的全过程; 能将前面所学知识与pb结合开发c/s方式的应用系 统。 第9章 数据库应用系统开发工具pb 3 目前,应用程序的开发主要可选择三种体系结构: 客户/服务器(c/s)、分布式和b/s(或web)体系结构。 c/s应用程序是传统开发人员普遍采用的应用程序 体系结构。随着internet和intranet的不断普及和应用 程序业务逻辑的复杂化,c/s体系结构的应用程序带来 一些问题。为解决这些问题,分布式和web体系结构应 运而生。 9.1 应用程序体系结构 4 9.1.1 c/s体系结构 9.1.2 分布式体系结构 9.1.3 web体系结构 9.1 应用程序体系结构 5 c/s体系结构将整个系统划分为两层:一层驻留在 客户端,一般由应用程序及相应的数据库连接程序构成 ,另一层安装在服务器端,通常是某个数据库系统,包 括数据库和服务器组件。客户端软件的主要功能是处理 与用户的交互、按照某种业务逻辑进行处理以及与数据 库进行交互,服务器端数据库系统根据客户端的请求进 行数据库操作,然后将结果传送给客户端。客户端与服 务器端(数据库)软件之间的交互通过sql语句进行。 9.1.1 c/s体系结构 6 c/s结构具有以下优点: (1)采用该体系结构可缩短软件系统的开发周期。 c/s体系结构将处理权力下放到客户端,因此客户端用户拥 有强大的处理能力,这在很大程度上激发了终端用户的积极性, 提高了工作效率。 (2)提高系统性能。 在该体系结构下,处理是分布式的,由众多的cpu参与处理 ,从而提高了整个系统的效率。 (3)采用该体系结构开发的系统具有柔性。 从组织运营和技术两方面提高了组织的柔性。 9.1.1 c/s体系结构 7 产生的问题: (1)维护困难。 (2)缺乏安全性。 (3)客户机负荷过重。 (4)网络传输负担过重。 (5)不适应internet环境的要求。 9.1.1 c/s体系结构 8 1. 客户端开发工具可以完成的工作 (1)设计窗口和定义窗口的控件 (2)生成菜单 (3)生成数据窗口 (4)在程序中直接书写sql语句操作数据库 (5)可以方便地生成和维护数据库 (6)在图形方式下生成数据查询。用户即使不会使用 sql语句也可以在此环境下生成复杂的查询,并将其作为一 类对象保存。 (7)实现数据库之间数据的转换 9.1.1 c/s体系结构 9 2. 数据库可以完成的工作 数据库是c/s应用系统的核心,从客户端开发工具来看,它 的作用主要有: (1)接收sql指令,执行sql指令,并将指令的执行结果返回 给客户端。 (2)查询优化。 (3)事务处理 (4)并发处理 (5)存取权限管理 (6)数据库规则 9.1.1 c/s体系结构 10 (7)相关完整性约束 (8)存储过程 (9)触发器 (10)视图 (11)序号生成器 9.1.1 c/s体系结构 11 9.1.1 c/s体系结构 查询优化 客户端发出的sql指令,数据库要先对其进行语法和 句法分析,然后进行查询优化。查询优化分为两类:一类 是基于语法的优化,这类优化是根据sql语句的写法而进 行的,相同的查询不同的写法会导致完全不同的查询效率 。另一类是基于成本的优化,这类优化与sql语句的写法 无关,仅与要完成的工作有关。基于成本的优化技术降低 了对开发人员的要求,可以使开发人员更专心地解决应用 中的问题。 12 9.1.1 c/s体系结构 事务处理 数据库的特点是数据的集中管理和共享,在通常情 况下总是有若干个事务并发地运行,这些并行的事务可 能并发地存取相同的数据。因此,数据库的一个重要任 务是要有一种机制去保证这种并发的存取和修改不破坏 数据的完整性,确保这些事务能正确地运行并取得正确 的结果。 13 9.1.1 c/s体系结构 并发处理 若不加控制的话,事务并发执行将导致不正确的结 果和数据库状态的不一致。为保证数据库正确地反映所 有事务的更新,以及在一事务修改数据库中的数据时, 其它事务不能同时修改这些数据,数据库必须用锁来控 制对数据的并发存取。 并发处理是数据库最重要的问题之一,解决的办法 是加锁。大多数数据库都有自动加锁功能。当数据库认 为必要时,会在相关对象上加上一个适当的锁。但自动 加锁并不一定都恰当,有时需要编程进行干预。 14 9.1.1 c/s体系结构 数据库规则 规则是加在数据库表列上的约束条件,是在数据库 上设定的。主要有限制列的取值范围、唯一性、是否 非空等。如果列的输入值不满足约束条件时,则数据 库会给出错误信息,数据库只接收满足约束条件的数 据。 15 9.1.1 c/s体系结构 触发器 触发器是一种特殊类型的存储过程,它在插入、删 除或修改特定表中的数据时起作用。触发器可以维持表 间数据的一致性,保证数据的相关完整性。触发器的优 点是不管什么原因造成数据库数据变化时都能自动响应 。 16 9.1.1 c/s体系结构 视图 视图是一个或多个表中数据的一种表现形式,可将 视图看作为一个移动的窗口,通过它可看到感兴趣的数 据。视图看起来非常象表,对它的查询和操作与表相同 。使用视图有以下优点: 看到的是所需要的。视图允许用户集中在他们感兴 趣的数据或他们负责的数据上进行工作。那些对特定用 户或与特定工作无关的数据可以被排除在视图之外。 简化数据操作。视图不仅可简化用户对数据的理解 ,而且可以简化他们的操作。那些被经常使用的查询可 以定义为视图,从而使用户不必为以后的操作每次指定 全部查询条件。 17 9.1.1 c/s体系结构 视图允许用户以不同的方式查询同样的数据。 安全性。通过视图用户只能查询或修改他们所能见到 的数据。通过使用视图和有选择的授权,用户可被限制 在使用数据的不同子集上。 逻辑数据独立性。视图可帮助用户屏蔽真实表结构带 来的影响,使应用程序和数据库结构相互独立,互不影 响。 18 3 c/s应用系统开发应考虑的问题及解决方案 开发c/s应用系统时主要应考虑两个问题: (1)客户端开发工具主要是应用前台的问题,数据库主要 是应用后台的问题。由于数据库和客户端开发工具的功能都在 不断增强,客户端开发工具在向数据库方向上延伸,数据库的 功能在向客户端开发工具方向延伸,一些功能是相互交叉的, 所以有些问题用客户端开发工具和数据库都能解决。对于应用 中的某些特定问题,使用客户端开发工具还是数据库来解决, 用数据库解决该问题的好处是什么,用客户端开发工具的好处 又是什么? (2)对于非数据库莫属的工作,客户端开发工具表现特征 怎样?客户端开发工具如何针对它们编程? 9.1.1 c/s体系结构 19 应用系统开发中的一些解决方案: (1)维护体现企业规则的表间关系可用客户端开发工具编程完成, 也可用数据库触发器来控制。这种表间的关系是随着企业规章制度的变 化而变化的。如果用客户端开发工具编程来实现,则程序的维护将是很 困难的。原则上,此类问题应该用触发器来解决,用触发器来实现具有 以下优点: 企业规则可以在数据库中集中控制。 如果企业规则发生变化,只需修改相应数据库触发器的内容, 无需修改客户端应用程序,系统容易维护。 客户端应用程序编程变得更简单。 系统运行效率会提高。 但过多地滥用触发器反而会使系统的效率降低。 9.1.1 c/s体系结构 20 (2)体现企业规则的数据运算可用客户端开发工具编程完 成,也要用存储过程完成。 (3)事务是由数据库管理的最小逻辑工作单元,在一个事 务中所有对数据库的更新操作要么全部成功,要么全部失败。 (4)并发处理是多人同时更新数据库中相同数据时的处理 方式,数据库可以自动加锁,但这种自动加锁方式不一定适合 实际需要。在实际的并发条件下会出现很多难以预料的复杂情 况,“恰当”地加锁是客户端开发工具的任务,也是一个较难 的问题。 (5)序号生成。应该由数据库来完成。 9.1.1 c/s体系结构 21 (6)视图是数据库中原始数据的某种变换。有时候, 这种变换可以用开发工具来完成。但视图的许多优良特性 是客户端开发工具所不具有的。哪些工作应由开发工具来 完成,哪些工作应由视图来完成,是数据库设计人员和开 发人员要认真研究的问题。 (7)数据库表列的约束既可以在数据库中完成,又可 使用开发工具编程实现。在这一点上它们功能完全重叠, 但它们的特性差异较大。在数据库中定义的约束条件只有 把数据送到数据库时才起作用,屏幕上录入数据正确与否 ,数据库无法在录入时知道。而在开发工具中定义的约束 只有在屏幕录入时才起作用,数据库不管它的对与错。因 此两种约束同样重要。哪些约束用数据库完成,哪些约束 在客户端应用程序完成,哪些约束两种都要做是需要认真 研究与解决的问题。 9.1.1 c/s体系结构 22 分布式应用体系结构将应用系统分为三层:表示层、业务逻辑 层和数据访问层。表示层应用程序安装在客户机上或从网络上下载 到客户机上,它负责用户界面并与用户进行交互。数据访问层是数 据源,通常是数据库系统。业务逻辑层是指程序中做出智能决策的 那一部分功能,业务逻辑层应用程序驻留在应用服务器上,该层也 称为中间层。 分布式应用程序体系结构有如下优点: (1)逻辑封装性。 将应用系统划分为不同逻辑块,层次清楚。 (2)痩客户机。 减少甚至消除了传统c/s体系结构中的“胖客户机”的功能负 担,使其消肿为“痩客户机”。 9.1.2 分布式体系结构 23 (3)提高系统性能。 将复杂的应用和业务逻辑分离出来并由一台或多台应用服务器进 行处理,不仅可提高应用程序的执行速度,而且可减少网络通信流量 。 (4)提高安全性。 由于所有业务逻辑集中驻留在应用服务器上,系统管理人员可方 便监控服务器的运行状况,容易控制访问服务器和与服务器打交道的 人员数量,从而减少系统管理人员管理系统和维护的工作量,确保系 统安全可靠地运行。 (5)零客户管理工作。 当需要动态改变应用程序的业务逻辑时,只要改变应用服务器的 相应应用程序,客户机上的应用程序几乎不需要改变。 9.1.2 分布式体系结构 24 web应用程序体系结构是分布式应用程序体系结构的变 种。在此体系结构中,客户端软件是通用的web浏览器,应 用服务器软件有web服务器和其它逻辑服务器。 在此体系结构中,客户端通过浏览器向web服务器发出 请求,web服务器将此请求转换成对其它应用服务器或数据 库服务器的请求,当其它应用服务器或数据库服务器返回数 据给web服务器后,web服务器生成数据(网页),并将其传 回给客户机上的浏览器。详细实现过程我们将在web数据库 一章中讨论。 9.1.3 web体系结构 25 9.2.1 pb应用开发流程 9.2.2 pb对象概述 9.2 pb基础 26 在此我们以pb8.0为例说明pb应用程序开发过程。 (1)系统分析和设计 在此阶段主要完成系统需求分析,理解系统要完成的任务。 (2)建立工作空间 工作空间(workspace)是pb中组织各种开发资源的一个概念, 类似于其它高级语言中的工程概念,但又有所不同。工作空间是对 软件资源进行管理的有效手段,其作用是方便对各种软件对象进行 分类管理。 (3)建立应用对象 要建立应用程序必须在工作空间下建立应用对象(application ),应用对象下管理的是项目的所有软件资源。 9.2.1 pb应用开发流程 27 (4)建立各种对象 完整的pb应用是由多种对象组合在一起构成的,这 些对象包括窗口(window)、数据窗口(data window)、类 (class)、菜单(menu)、函数(function)等,它们类似于 积木,通过power script语言将这些对象组合起来就构 成了一个完整的pb应用程序。 (5)编写事件处理程序 在各种对象设计完成后,需要使用power script编 写对象或控件的事件处理程序,在这些程序中可嵌入标 准sql语句,从而实现对数据库的操作。 9.2.1 pb应用开发流程 28 (6)运行调试 通过上述步骤设计的应用程序,要经过不断的运行 调试、查找错误,最后运行成功后才打包生成可执行文 件。 (7)打包生成可执行程序 利用pb提供的打包功能,生成并发布应用程序,脱 离pb环境独立运行。 9.2.1 pb应用开发流程 29 1. 对象、属性和事件 pb的对象是由pb提供的,可用来构造pb应用程序的一 些部件。pb为这些对象约定了属性(properties)和事件 。属性决定了事件的特征,而事件是外部作用于对象上的 “动作”,这一动作可触发一段程序的执行。 每个pb对象包含以下组成部分: (1)每一个对象都包含一个属性集来描述对象的特 征,可以通过程序读取或设置这些属性值。 (2)每一对象可有一组相关事件,每一个事件对应 一个事件处理程序,当对象指定事件发生时就会触发相应 事件的处理程序。 9.2.2 pb对象概述 30 9.2.2 pb对象概述 (3)每一对象可有若干个函数供对象中的脚本( script)调用。 (4)每个对象可有若干结构。 (5)每一对象可以有若干脚本代码,每一段脚本代 码与对象的某一事件相对应,对应事件发生时自动执行 其脚本代码。脚本代码也称为事件处理函数或事件处理 程序。 开发人员可以为对象的属性指定特定的值,为对象 或控件的事件编写特定的程序,也可为对象定义新的事 件(即用户自定义事件)。当对象的事件发生时,将驱 动一特定的程序段完成其操作,因此在学习pb时我们应 该了解对象的事件何时触发、事件触发的先后顺序等。 31 9.2.2 pb对象概述 2. pb库文件 pb的所有对象存储在pb的库文件(扩展名为pbl)中 。一个pb的应用程序有一个或多个库文件。在建立pb应用 对象时系统会提示开发者指定一个文件名。当pb库文件过 大时会影响应用程序的执行效率,我们可以建立新的库文 件,将pb对象存储在不同的库文件中。 建立一个工作空间将产生一个扩展名为pbw的文件, 它记录有关工作空间的信息。在一个工作空间中可建立多 个目标,每一目标对应于一个扩展名为pbt的文件,其中 记录了有关目标的信息。每一个目标实际上是一个应用程 序,它可对应一个或多个库文件。 32 3. 应用对象 pb的应用程序是从应用对象开始执行的。应用程序对象定义 应用程序的特征,如当前应用的库文件、缺省字体字型等。应用 对象常使用的事件是open事件和close事件,当执行一个应用程 序时,应用对象的open事件被触发,在open事件中必须有一条打 开主窗口的语句,还可有一些与数据库连接有关的语句等。当用 户结束应用时,应用对象的close事件被触发,此事件是关闭数 据库。 4. 窗口对象 窗口是用户和pb应用程序间的主要界面,它可以显示信息, 接收用户的信息,响应用户的操作等。窗口由属性、事件和控件 构成。其中属性定义了窗口的外形和特征,如窗口的大小、标题 等。最常用的事件是open 和close事件。控件是窗口用来控制应 用的部件,如命令按钮。 9.2.2 pb对象概述 33 5. 数据窗口对象 数据窗口对象用于数据库或其它数据源的数据检索和数 据操作。它可根据用户的需求设计成不同的显示风格,也可 以对每一列定义显示格式、编辑格式和合法性检验规则等。 数据窗口的数据源可以是表、视图、存储过程或外部数 据。一个窗口可以有多个数据窗口,不同的数据窗口可以对 应不同的数据源甚至不同的数据库系统。 6. 查询对象 一个查询(query)是用一个名字保存的一条select语句 ,使其可以重复用于数据窗口对象的数据源。由于查询可以 一次编码,重复使用,因此使用它可提高开发效率。 9.2.2 pb对象概述 34 7.菜单对象 菜单是用户操作应用程序的主要界面或工具。用户通过选择菜 单项可执行相关的命令或任务。开发者可为用户定制菜单,为菜单 项定义快捷键或图标。 pb定制的菜单类似于word的菜单,它可分为多个层次,一个菜 单项可弹出一个下拉式菜单,一个下拉式菜单项又可弹出一个级联 菜单等。 8.用户对象 在pb应用程序中,有一些对象具有类似的特征并重复出现或使 用时,我们可以定义用户对象(user object)。用户对象一经定义 ,就和pb自身对象一样使用。 pb有两类用户对象:可视用户对象和类用户对象。 9.2.2 pb对象概述 35 9.工程对象 建立可执行程序、动态连接库或其它系统应用的组件时 需要建立工程(project)对象。 pb允许在可执行文件或动态连接库中包含附加资源(如 位图和图标等),也可将附加资源单独分发。 10.函数 pb可以定义两种类型的函数: (1)对象级函数。为指定对象定义的函数,这类函数封装 在指定对象之内,如窗口函数。 (2)全局函数。它不封装在其它对象之内,而是作为独立 的对象存储。这些函数主要是一些通用的函数,如数学运算 函数。 9.2.2 pb对象概述 36 11.结构 结构(structure)对象类似于c语言中的结构,是由 一个或多个相关的变量构成,这些变量可以有相同或不 同的变量类型。使用结构可以将一组相关的数据项作为 一个数据实体来处理。pb有两类结构: (1)对象级结构。它是与特定对象相关的结构,这些 结构可用于对象自己的程序代码中,也可以被其它对象 的程序引用。 (2)全局结构。它不与任何对象有关,可以在应用程 序的任何程序代码中说明结构实例和对此结构进行引用 。 9.2.2 pb对象概述 37 pb通过两类数据库接口软件与不同的数据库相连, 即通用的odbc(open database connectivity)接口软 件与专用的数据库接口软件。odbc开放式数据库互接标 准接口允许应用存取以sql做为查询语言的数据库管理系 统,pb提供了到odbc的接口软件,通过这一接口软件, pb可以连接到任何支持odbc的数据库上。专用接口软件 是专为某种数据库设计,通过更换pb到数据库的接口软 件以及数据库到网络的接口软件,可以使pb连接到不同 的数据库上,与不同的数据库构成客户/服务器体系结构 的客户端或b/s模式的web服务器端。 9.3 pb与数据库接口 38 9.3.1 odbc 9.3.2 pb中odbc数据源及数据库连接参数的 配置 9.3.3 pb与oracle连接 9.3.4 应用程序与oracle数据库连接 9.3 pb与数据库接口 39 odbc是一种访问数据库的统一界面,已被数据库界广泛 接受和采用。从逻辑上看,odbc由两部分组成: (1)一部分是连接客户端的标准客户端界面。从客户端 的角度odbc遵守共同的标准,这使得不同的开发工具连接和 使用数据库的方式是一样的,也使得使用不同的数据库管理 系统的方式也一样。 (2)另一部分是连接专门的数据库管理系统的服务器端 界面或驱动程序。 odbc实际上是一个访问数据库的函数库,应用程序可以 通过该函数库直接操作数据库中的数据。另外odbc是基于sql 语言的,所以odbc是sql与应用程序之间的标准接口。 9.3.1 odbc 40 odbc由应用程序、驱动程序管理器、驱动程序和数 据源构成。其中应用程序通过odbc函数完成对数据库的 访问操作,其功能包括: (1)请求对数据源的连接,获取连接句柄。 (2)指定事务控制方式。 (3)定义接收结果的数据区。 (4)向数据源发送sql语句。 (5)接收sql语句的查询结果。 (6)处理出错信息,并将出错信息返回给应用程序。 (7)结束对数据源的连接。 9.3.1 odbc 41 驱动程序管理器负责对odbc的驱动程序和数据源进 行管理,其功能包括: (1)安装指定的驱动程序。 (2)定义数据源,并在odbc.ini文件中把数据源映 射到具体的odbc驱动程序上。 (3)为每一驱动程序提供odbc函数的入口点。 (4)为odbc调用提供参数验证等。 9.3.1 odbc 42 驱动程序是真正实现odbc函数调用和访问数据库的 动态连接函数库,对不同的数据库有不同的驱动程序。 一般情况驱动程序由数据库厂商提供。驱动程序的功能 为: (1)建立与数据源的连接。 (2)向数据源提交sql请求。 (3)处理查询结果。 (4)将数据源错误转换为标准错误代码,并返回给 应用程序。 (5)提交事务的开始请求、完成请求和撤消请求等 。 9.3.1 odbc 43 数据源是通过odbc连接的关系数据库。 odbc是通过驱动程序来保证数据库的独立性,而驱 动程序则是一个用以支持odbc函数调用的模块,应用程 序通过调用驱动程序所支持的函数来操纵数据库。通过 建立不同的数据源,可以对不同的数据库进行操作。 9.3.1 odbc 44 1.定义数据源 不管是在pb下操作数据库,还是在应用程序中使用 数据库,如果通过odbc连接数据库,则必须首先定义数 据源(dsn)。我们也可通过pb的数据库配置文件( database profiles)对话框调用odbc管理程序来实现。 其方法如下:单击pb的db profile工具按钮,展开odbc ,选择utilities,双击odbc administrator 调用odbc 管理程序,点击“用户dsn”标签页,单击“添加”命令 按钮,选取所使用的数据库的驱动程序,按“完成”命 令按钮,指定odbc标签页下的data source name(数据 源名) 和database标签页下的database file(数据库 文件名)和其它一些参数。 9.3.2 pb中odbc数据源及数据库连接参数的配置 45 2.数据库连接参数的配置 在pb下操作库,必须对数据库的连接参数进行配置。其 方法如下: (1)单击pb的db profile工具按钮。 (2)选取数据驱动程序,在此选择odbc。 (3)对connection标签页下指定参数:profile name( 配置文件名)、data source(数据源名称,在1中定义的数据 源名称)、user name(用户名)、password(口令)。 一些数据库如oracle ,我们可使用专用接口,只要对 数据库连接参数进行配置,而不要定义数据源。 9.3.2 pb中odbc数据源及数据库连接参数的配置 46 由于使用专用接口的查询速度要比使用odbc接口快得多,在应用 系统中应采用oracle专用接口。pb中oracle接口的使用方法如下: (1)在客户机上安装oracle客户端软件,并利用oracle的net configuration assistant配置客户端,假定数据库的连接描述符( 数据库别名)为wz。 (2)单击pb的db profile工具按钮。 (3)选取数据驱动程序,在此选择oracle。 (4)对connection标签页下指定参数:profile name(配置文件 名)、database、servername、login id(用户名)、password(口令 )。其中database=”wz”,servername可设置为“tns:wz.world” 或“:wz.world”或“wz.world”, login id为“wzzk”, password为“wzzkadmi”。 9.3.3 pb与oracle连接 47 pb应用程序要访问数据库必须向数据库服务器提供合法的登 录信息并进行登录。pb的数据库连接是建立与某台数据库服务器 上数据库的可靠通信,以传递和提交用户的数据库操作请求。pb 利用事务对象管理数据库的连接。 1事务对象及其建立 事务对象是pb的不可视对象,对象类型为transaction。 sqlca(sql communications area)是一个事务对象实例,它是 pb预定义的一个全局事务对象,用来管理开发期间的数据库连接 参数的配置文件,以便pb与数据库服务器进行交互。同时我们也 可以在应用程序中自己定义事务对象,其方法如下: (1)用transaction类型说明事务对象变量。 (2)用create 语句建立对象实例。 9.3.4 应用程序与oracle数据库连接 48 (3)设置连接参数并建立连接。 (4)利用事务变量进行数据库操作。 (5)用destroy语句清除事务对象变量。 例9-1 建立事务对象myoracle。 transaction myoracle/定义事务对象变量 myoracle=create transaction/建立事务对象实例 myoracle.dbms=”o91 oracle9i” myoracle.database=”wz”/数据库别名 myoracle.userid=”wzzk”/用户名 9.3.4 应用程序与oracle数据库连接 49 9.3.4 应用程序与oracle数据库连接 myoracle.dbpass=”wzzkadmi”/用户口令 myoracle.logid=”wzzk”/登录名 myoracle.logpass=”wzzkadmi”/登录口令 myoracle.servername=”wz.world” myoracle.autocommit=false myoracle.dbparm=”commitondisconnect=no” connect using myoracle;/通过事务对象与数据库连 接 如果在pb应用程序中使用sqlca,则不需要定义,只 需设置连接参数且connect命令后的“using sqlca”可 省略。 50 9.3.4 应用程序与oracle数据库连接 2事务对象的使用 pb的事务对象可在pb脚本的任何地方定义,但在使用 时应注意定义的事务对象变量是全局变量、共享变量、实 例变量还是局部变量,因为其作用范围不同。 在执行sql语句或进行数据窗口操作之前,必须使用 connect连接相应数据库。 如果使用自定义的事务对象,在sql语句后面应加上 “using 事务对象变量名”。 在完成对数据库的操作后,使用“disconnect using 事务对象名;”断开与数据库的连接,在适当时候应清除事 务对象变量 51 每一种编程语言都有自己的约定,pb也不例外。 powerscript是pb的编程语言,事件处理程序、自定义函 数等的编写都是使用 powerscript编写的。由于我们已 学习了一种或几种高级语言(如c语言),在此仅对 powerscript作一简单介绍。 94 powerscript 语言介绍 52 9.4.1 powerscript基本概念 9.4.2 常量、变量、函数和表达式 9.4.3 powerscript语句 9.4.4 嵌入式sql与动态sql语句 9.4.5 函数与事件的调用 9.4.6 oracle的存储过程和函数调用 94 powerscript 语言介绍 53 1 空值 空值是关系数据库中的一个特殊概念,可以将其认 为一个特定的值,也可以将其认为不确定的值。空值不 是空字符串,也不是数字0。用null表示空值。 在powerscript中不能用赋值语句对变量赋null值, 而应使用函数setnull()对变量赋null。也不能将null用 于比较运算,而须使用函数isnull()来判断表达式是否 为null。 在sql的insert和update中可以使用null将表中字段 设置为空值。 9.4.1 powerscript基本概念 54 2 代词 powerscript可以使用代词来引用对象或控件,这样 可以增加程序代码的通用性。powerscript中的代词有: parent、this和super。 (1) parent parent引用当前对象的父对象或包含当前对象的对 象,它可用于窗口中的控件、用户对象的控件和菜单等 。 (2) this this用于引用当前对象自身的属性或事件等。它可 用于窗口、用户对象、菜单、应用对象和各种控件等。 9.4.1 powerscript基本概念 55 (3)supper 子对象或控件中的程序可以调用祖先对象或控件中 的程序,可以直接使用祖先的名称调用,也可使用代词 supper来调用。这里所说的子对象与祖先对象是有继承 关系的两个对象。 调用祖先对象函数的格式为: supper:函数名(参数) 调用祖先对象事件的格式为: call supper:事件名 或:supper:event(事件名) 9.4.1 powerscript基本概念 56 常量、变量、函数和表达式是所有程序设计语言的 重要组成部分,在此只介绍powerscript的特殊部分。 1数据类型 powerscript的数据类型可分为标准数据类型、可变 数据类型、系统对象数据类型和枚举数据类型。 (1)标准数据类型 标准数据类型是我们在高级程序设计语言中所熟悉 的数据类型,如char、int,在此不作介绍。 (2)可变数据类型 可变数据类型(any类型)变量可以保存任意数据类 型的值。可用赋值语句给any类型的变量赋值,赋值后, 变量类型也随之变化。 9.4.2 常量、变量、函数和表达式 57 (3)系统对象数据类型 系统对象数据类型是powerscript的一种特殊类型。 在pb中窗口、菜单、各种控件都是系统对象。有时为建 立系统对象的不同实例,需要定义具有系统对象数据类 型的变量。 (4)枚举数据类型 枚举数据类型常用作函数参数或指定对象或控件的 属性。即在pb中有些函数的参数、对象或控件的属性是 枚举数据类型的。 应当注意的是用户不能定义枚举数据类型的变量, 且在每一枚举值之后应加上“!”。 9.4.2 常量、变量、函数和表达式 58 2常量 常量的使用与我们所学过的高级语言类似,在此仅 介绍符号常量的定义。符号常量是将一个标识符说明为 一个常量,它的作用主要是用来提高程序的可读性和可 移植性。其格式为: constant 权限 类型 常量名=常量值 或:权限 constant 类型 常量名=常量值 其中权限为private(私有)、 protected(保护)和 public(公共)。 例如:说明pi是一个公共常量的语句为: constant public real pi=3.14159 9.4.2 常量、变量、函数和表达式 59 3变量 (1)全局变量 在整个应用程序内有效,它独立于任何对象。可以 在窗口、用户对象、菜单或其它对象的脚本中定义全局 变量。 (2) 实例变量 属于定义它的对象并与该对象的一个实例有关,可 以将其看作对象的一个属性。实例变量与定义它的对象 实例同时建立和撤消。 9.4.2 常量、变量、函数和表达式 60 (3)共享变量 属于定义它的对象并在这个对象的所有实例中引用 。共享变量在定义它的对象关闭时并不撤消,其值保持 不变,再次打开该对象可继续使用该值。共享变量只能 在定义它的对象脚本中引用。可以在窗口中、用户对象 、菜单或应用对象中定义共享变量。 (4)局部变量 局部变量在使用它的事件处理函数或自定义函数中 说明。程序段内只能引用在其内部定义的局部变量。局 部变量在定义它的脚本中执行时建立,在脚本执行完成 后立即释放。 9.4.2 常量、变量、函数和表达式 61 powerscript中的函数分为内部函数、用户自定义函 数、外部函数和远程过程调用(remote procedure call,简称为rpc)。 内部函数由系统函数和对象函数组成,系统函数与 任何对象无关的并由powerscript提供,这些函数完成一 些公共的计算和处理功能。 用户自定义函数是用户根据需要定义的函数,用户 可定义全局函数,也可定义对象函数。 外部函数是指使用其它语言编写并保存在动态链接 库中的函数,在使用外部函数时必须进行说明。 系统函数的调用与其它高级语言函数的调用一致。 对象函数的调用格式为: 对象名.函数名(参数值表)。 9.4.2 常量、变量、函数和表达式 62 5表达式 表达式是由常量、变量、函数和运算符等构成的。 powerscript支持四类运算符:算术运算符、关系运算符 、逻辑运算符和字符串连接运算符。它们的使用与其它 高级语言类似,但应注意的是:减号(-),在一般情况 下“-”被认为是连字符,在表达式中要将“-”作为减 号来使用时必须在它的前后都加上一个空格。 9.4.2 常量、变量、函数和表达式 63 1赋值语句 赋值语句给变量或对象的属性赋值。给变量赋值的格式 为:变量名=表达式。给对象的属性赋值的格式为:对象名. 属性名=表达式。应当注意的是powerscript不允许一次给多 个变量或属性赋值。同时与c语言类似,powerscript提供了 一些简化的赋值运算符,如“+”。 2分支结构 powerscript提供的分支结构有条件语句和多分支语句。 (1)条件语句 条件语句根据特定条件选择执行不同的语句,它分为单行格 式和多行格式。 9.4.3 powerscript语句 64 单行格式如下: if 条件 then 语句1 else 语句2 多行格式: if 条件1 then 语句组1 elseif 条件2 then 语句组2 else 语句组 end if 9.4.3 powerscript语句 65 (2)多分支结构 choose case语句是用来进行多分支选择的,其格式如下: choose case 表达式 case 表达式1 语句组1 case 表达式2 语句组2 case 表达式n 语句组n case else 语句组 end choose 9.4.3 powerscript语句 66 3循环结构 powerscript的循环语句有5种,其格式分别如下: 格式1: do until 条件 语句组 loop 该语句当条件不成立时执行语句组,直到条件成立时结束循环 。 格式2: do 语句组 loop until 条件 该语句先执行语句组,然后检测条件是否成立,若条件不成立继续 执行语句组,若条件成立,则结束循环。 9.4.3 powerscript语句 67 格式3: do while 条件 语句组 loop 该语句当条件成立时执行语句组,当条件不成立时结束循环。 格式4 do 语句组 loop while 条件 该语句先执行语句组,然后检测条件是否成立,若条件成立继 续执行语句组,否则结束循环。 格式5 for 循环变量=初值 to 终值 step 步长 语句组 next 9.4.3 powerscript语句 68 4call语句 call语句用于在了对象中调用祖先对象中的函数或事件。可 以调用菜单、用户对象、窗口等祖先对象中的事件或函数,也可 以调用用户对象或窗口祖先对象中控件的事件。其格式如下: call 祖先对象名控件名:事件名。 5建立与删除对象实例语句 createt 和destroy语句分别用来创建和删除对象实例。 (1) create语句 create语句根据指定的对象类型建立一个对象实例,该语句 的返回结果为存储在同一类型的变量中的对象实例。在对象实例 被创建后可以引用对象实例的属性。 9.4.3 powerscript语句 69 该语句有两种格式,一种是静态指定对象类型,另一种是动态 指定对象类型。它们的格式如下: 格式1:对象变量=create 对象类型 此语句为对象变量创建一个指定对象类型的对象实例。 格式2:对象变量=create using 对象类型字符串 该语句根据对象字符串中指定的对象类型建立一个对象实例。 (2) destroy语句 destory语句删除由create语句建立的对象实例。用create语句 建立的对象实例在使用完毕后应使用该语句及时释放,使对象实例 所占用的内存资源得到重新使用。该语句格式为: destroy 对象变量 9.4.3 powerscript语句 70 在pb应用程序开发过程中,在多数情况下对数据库的操作是 通过数据窗口进行的,但数据窗口并不是万能的,有时我们需要 利用sql语句对数据库进行操作。powerscript提供了嵌入式sql 语句与动态sql语句。 1 嵌入式sql 在powerscript的脚本中可以使用标准sql语句,但在标准 sql语句的后面应加上“using 事务对象名 ;”,如果所使用的 事务对象是sqlca,则只需在sql语句后加上“;”即可。例如连 接数据库命令为:connect using sqlca; 如果在sql语句中使用变量,应在变量之前加上“:”。 应该注意的是:在sql语句中使用的函数应该是数据库系统 的函数,而不是pb的函数。 9.4.4 嵌入式sql与动态sql语句 71 2 动态sql (1)既无输入参数、也无结果集的动态sql语句 该类型sql语句格式为: execute immediate 字符串 using 事务对象名; (2) 有输入参数、但无结果集的动态sql语句 该类型动态sql语句能够处理设计时已经知道sql语句的参数 个数,且该sql语句没有返回值。它可以在运行时定义参数的数 据操作语句。其格式如下: prepare 动态策略区变量 from 字符串 using 事务对象 名; execute 动态策略区变量 using 参数值表 ; 9.4.4 嵌入式sql与动态sql语句 72 9.4.4 嵌入式sql与动态sql语句 其中动态策略区(dynamicstagingarea)变量是类型为 dynamicstagingarea的对象变量,通常使用sqlsa,这里 动态策略区用于准备sql语句以及所需参数个数。字符串的内 容是一有效sql语句,使用“?”代表所需参数。应该注意参数 值表中参数值的顺序必须对应于字符串中?的顺序。 例9-2 使用动态sql语句,删除指定物资编码的记录。程序段 如下: string vwzbm=010101 prepare sqlsa from “delete from wzbmb where wzbm=?”; execute sqlsa using :vwzbm; 73 9.4.4 嵌入式sql与动态sql语句 (3)编译时已知道参数和结果集的动态sql语句 该类动态sql语句处理参数和结果集在编译时已知的情况 下,它有两种形式:使用游标和使用存储过程。 使用游标形式的语法格式和程序中语句出现次序为: declare 游标名 dynamic cursor for 动态策略区变量; /说明动态游标 prepare 动态策略区变量from 字符串 using 事务对象 名 ;/准备动态策略区 open dynamic 游标名 using 参数值表 ;/打开动态 游标 74 9.4.4 嵌入式sql与动态sql语句 fetch 游标名 into 变量表 ;/读取行数据 close 游标名;/关闭动态游标 使用存储过程形式的语法格式和程序中语句出现次序为: declare 存储过程名 dynamic procedure for 动态策略区变量;/ 说明动态过程 prepare 动态策略区变量from 字符串 using 事务对象名 ;/准备动态 策略区 execute dynamic 存储过程名 using 参数值表;/执行动态过程 fetch 存储过程名 into 变量表 ;/读取行数据 close 存储过程名;/关闭动态过程 其中字符串的内容是一有效sql语句,如果有变量,变量名前加上“:”,用 “?”代表参数。 75 9.4.4 嵌入式sql与动态sql语句 例9-3 利用游标方式实现一个带参数的动态查询。其程序段如下 : declare wzbm_cursor dynamic cursor for sqlsa; string vwzmc string vwzbm=010102 prepare sqlsa from “select wzmc from wzbmb where wzbm=?”; open dynamic wzbm_cursor using :vwzbm ; fetch wzbm_cursor into :vwzmc ; close wzbm_cursor; 请读者考虑如何使用存储过程方式实现例9-3的功能。 76 9.4.4 嵌入式sql与动态sql语句 (4)不知道参数和结果集的动态sql语句 该类动态sql语句能处理在编译时不知道参数和结果集 sql语句, 它有两种形式:使用游标和使用存储过程。 使用游标形式的语法格式和程序中语句出现次序为: declare 游标名 dynamic cursor for 动态策略区变量; /说明动态游标 prepare 动态策略区变量from 字符串 using 事务对象名 ; /准备动态策略区 descripbe 动态策略区变量into 动态描述区变量; open dynamic 游标名 using descriptor 动态描述区变量; /打开动态游标 fetch 游标名 using descriptor 动态描述区变量; /读取行数据 close 游标名;/关闭动态游标 77 9.4.4 嵌入式sql与动态sql语句 使用存储过程形式的语法格式和程序中语句出现次序为: declare 存储过程名 dynamic procedure for 动 态策略区变量;/说明动态过程 prepare 动态策略区变量from 字符串 using 事务对 象名 ;/准备动态策略区 descripbe 动态策略区变量into 动态描述区变量; execute dynamic 存储过程名 using descriptor 动态描述区变量;/执行动态过程 fetch 存储过程名 using descriptor 动态描述区变 量;/读取行数据 close 存储过程名;/关闭动态过程 78 9.4.4 嵌入式sql与动态sql语句 其中字符串的内容是一有效sql语句,如果有变量,变量名前加 上“:”, 用“?”代表参数。动态描述区变量是类型为 dynamicdescriptionarea 的对象变量,可选系统默认的全 局变量sqlda。通过动态描述区变量的 四个属性: numinputs、inparmtype、numouputs、outparmtype 可以得到输入参数个数、输入参数类型、输出参数个数、输出参 数类型 的信息,其中inparmtype是一个数组,每个元素
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年上海立达学院辅导员考试真题
- 提升业务拓展能力的实践计划
- 2024年南京理工大学辅导员考试真题
- 2024年西南医科大学选调工作人员笔试真题
- 2024年嘉兴市海宁市马桥养老服务中心招聘真题
- 2024年湖北省知识产权局下属事业单位真题
- 未来发展趋势分析计划
- 2024年四川轻化工大学选调笔试真题
- 2024年海南省医疗保障局下属事业单位真题
- 2024年宁波市鄞州区公立学校招聘笔试真题
- 汉谟拉比法典中文版
- 2025届高考地理复习+情景类型题分析
- DLT 1529-2016 配电自动化终端设备检测规程
- 2018年四川省中职学校技能大赛建筑CAD赛项 样题
- 芯片封装可靠性评价与失效分析
- 2024年人工智能训练师(初级)职业鉴定理论考试题库及答案
- 质量环境职业健康安全管理体系三合一整合全套体系文件(管理手册+程序文件)
- 山东省青岛市崂山区2023-2024学年七年级下学期期末数学试题
- 氧气吸入操作评分标准(中心供氧)
- JT-T-969-2015路面裂缝贴缝胶
- 内科人卫一类模拟考试题(含答案)
评论
0/150
提交评论