Welcome

首页 / 软件开发 / Delphi / 第十八章-Delphi客户服务器应用开发(三)(5)

第十八章-Delphi客户服务器应用开发(三)(5)2007-05-0718.3.3 使用存储过程

18.3.3.1 TStoredProc部件概述

存储过程是以数据库服务器为基础的接受输入参数,并将结果返回给应用程序的一段程序。TStoredProc部件操作远程服务器上的数据库中的存储过程。存储过程是一连串表达式的集合,作为服务器的一部分存储。存储过程在服务器上执行一系列重复性的与数据库相关的任务,并将结果传给客户应用程序,如Delphi数据库应用程序。

TStaredProc部件使Delphi数据库应用程序能执行服务器上的存储过程。

通常,作用于数据库表中大量记录并且使用统计或数学函数的操作都是存储过程的首选对象。通过将这些重复计算任务转移到服务器,可以提高数据库应用程序的性能。

● 充分利用服务器的处理能力和速度

● 减少网络传输的数量

例如,考虑一个需要计算单个值的应用程序,在大批记录中的标准差值。如果在Delphi应用程序中执行这项功能就必须从服务器中得到所有在计算中用到的记录,这必将导致网络拥塞。因为应用程序所需的只是代表标准差的最终返回值。因此,由服务器上的存储过程来读数据,执行计算和将值传给应用程序将更有效。

1. TSoredProc的关键属性

⑴ DatabaseName属性

DatabaseName属性描述要访问的数据库的名字。该属性可以为:

● 已定义的BDE别名

● 本地型数据库的目录

● Local InterBase服务器的目录路径和文件名

● TDatabase定义的应用程序别名

在改变DatabaseName之前要使用Close方法将Dataset部件置为非活跃状态。

⑵ StoredProcName属性

StoredProcName属性表示服务器上的存储过程名。Oracle服务器允许多个具有相同名字的存储过程。因此要设置Overload属性来描述执行在Oracle服务器上的存储过程名。

⑶ Overload属性

Oracle服务器允许Oracle软件包中存储过程的重载。就是说具有相同名字的不同过程,设置Overload属性用来描述执行在Oracle服务器上的存储过程。如果Overload值为零,则假定没有重载,如果Overload为1,则Delphi执行具有同名的第一个存储过程;如果值为2,则执行第二个存储过程。

⑷ Params属性

Params属性包含传给存储过程的参数。

2. 关键方法

⑴ ParamByName方法

声明:function ParamByName(const Value: String): TParam;

ParamByName方法返回Params属性中具有名为Value的元素值。一般用该方法在动态查询中给参数赋值。

⑵ Prepare方法

PrePare方法准备要执行的存储过程,这允许服务器载入存储过程,否则准备处理异常。

⑶ ExecProc方法

ExecProc方法执行服务器上的存储过程。

⑷ Open方法

Open方法打开DataSet部件,并将其置于浏览状态。这相当于将Active属性置为True。对于TStoredProc如果存储过程返回一个结果集,则使用Open执行存储过程。如果存储过程返回单行,早使用ExecProc执行存储过程。

18.3.3.2 TStoreProc使用方法

1. 建立一个StoredProc部件

为数据库服务器上的存储过程建立一个TStoredProc部件的步骤如下:

⑴ 从Component Palette的Data Access页选择TStoredProc部件放在数据模块上。

⑵ 将TStoredProc部件的DatabaseName属性设置为存储过程所在的数据库名。

DatabaseName必须是BDE别名。

⑶ 将TStoredProc部件的StoredProcName属性设为所用的存储过程名,或者从下拉式

列表框中选择。

⑷ 在TStoredProc部件的Params属性中描述输入参数。可以使用参数编辑器来设置输

入参数。参数编辑器也可让用户察看存储过程返回给应用程序的值。

2. 设置存储过程的输入参数,察看输出结果参数

许多存储过程需要给它们传入一系列的输入参数,以确定处理什么和怎样处理,在Params属性中描述这些参数。所描述的输入参数的顺序是很重要的,它由服务器上的存储过程来确定。在设计时,最容易和最安全的方法是激活TStoredProc参数编辑器,编辑输入参数。参数编辑器以正确的次序列出输入参数,让你给它们赋值。

要激活TStoredProc的参数编辑器:

① 选择TStoredProc部件。

② 按鼠标右键激活加速菜单(Speed Menu)。

③ 选择Define Parameters。

参数名列表框显示过程的所有输入,输出和结果参数。有关输入、输出参数的信息从服务器中获得。对于某些服务器而方,参数信息是不可访问的,如Sybase,在这种情况下,列表框是空的,因此必须自己按过程要求的顺序增加输入输出参数。

参数类型复选框中描述所选的参数是输入、输出,还是结果参数。如果服务器支持参数可以既是输入又是输出。如果在列表框中增添参数,就必须设置参数类型。

数据类型复选框,列出列表框中所选参数的数据类型。如果给列表框真善美参数,必须设置数据类型。

在值编辑框中给输入参数赋值。

如果服务器不传递存储过程信息给Delphi,则可以用Add按钮给存储过程增添参数。Delete按钮则是将增添的参数删除,Clear按钮将清除列表框中所有参数。

设置完参数后,选择OK按钮。

3. 在运行时建立参数和参数值

在运行时建立参数,可直接访问Params属性。Params属性是参数字符串的数组。例如,下列代码将编辑框的文本赋给数组的第一个字串:

StaredProc1.Params[0].Asstring := Edit1.Text

也能够用ParamsByName方法通过名字访问参数:

StoredProc1.ParamsByName("Company") Asstring := Edit1.Text;

4. 准备和执行存储过程

要使用存储过程还必须准备并执行它。可以有两种方式准备一个存储过程:

● 在设计时,通过选择参数编辑器的OK按钮

● 在运行时,通过调用TStoredProc的Prepare方法

例如,下面的代码准备存储过程的执行:

StoredProc1.Prepare;

要执行准备好的存储过程,调用TStroedProc部件的ExecProc方法。下列代码演示了准备和执行存储过程:

StoredProc1.Params[0] Asstring := Edit1.Text;

StoredProc1.prepare;

StoredProc1.ExecProc;

当你执行一个存储过程,它返回输出参数或结果集,有两种可能的返回类型:单个返回,如单值或值集,和一群结果集,返回很多值。

5. 访问输出参数和结果集

存储过程在输出参数数组中返回值。如果服务器支持返回值可以是单个结果或者结果集。

在运行时访问存储过程的输出参数,可以索引Params属性或者用ParamByName方法访问这些值。下列表达式都用输出参数设置了编辑框的值:

Edit1.Text := StoredProc1.Params[6].AsString;

Edit1.Text := StoredProc1.ParamsByName("Contact").AsString;

如果存储过程返回结果集,则用标准数据相关控制访问和显示值会更有用。

在某些服务器上如Sybase,存储过程能象查询语句那样返回结果集,应用程序可以使用数据相关控制一显示这些存储过程的输出。

用数据相关控制显示存储过程返回结果的方法如下:

① 将DataSource部件放在数据模块上。

② 将DataSource部件的DataSet属性设置为接收数据的TStoredProc部件的名字。

③ 将数据相关控制的DataSource属性设为DataSource部件的名字。

这样,当用于TStoredProc部件和Active属性为True时,数据相关控制就能显示从存储过程返回的结果。

18.3.4 从开发平台到服务器的向上适化