一概述Delphi + MS SQL Server是目前最为流行的管理信息系统开发环境和工具Delphi的强大数据库操作控件极大地减轻了开发人员的工作量在这些控件中最常用的有TQueryTTableTADOQueryTADOTableTADODataSete等这些控件执行查询操作时有一个共同的特点即将所有数据库记录从服务器取回客户端再根据查询的条件进行筛选很明显如果有大量的数据在服务器与客户端之间传递就会降低程序执行的速度影响应用程序的性能针对这种情况MS SQL Server数据库和Delphi开发工具都提供了存储过程来解决这类问题存储过程是一段在服务器上执行的程序它在服务器端对数据库记录进行处理再把结果返回到客户端通过使用存储过程一方面可以利用服务器强大的计算能力和速度另一方面避免把大量的数据从服务器下载到客户端减少网络上传输量服务器只需将计算结果传给客户端其效率之高是非常明显的
二创建存储过程
在MS SQL Server上的存储过程可分为二类一类是类似于select 查询用于检索数据检索到的数据能够以数据集的形式返回给客户端如
CREATE procedure proc
@dw char()
as
select dwdm from cchdwdm where dw=@dw
该存储过程有一个输入参数 @dwdm以数据集的形式返回结果
另一类存储过程是通过输出参数返回信息或不返回信息或只执行一个动作如
CREATE procedure proc
@m smallint
@m smallint
@result int OUTPUT
as
select @result=@m*@m
该存储过程有二个输入参数@m@m还有一个输出参数@result
按照创建存储过程的时机来划分创建存储过程也有二种方式一是利用MS SQL Server的Enterprise Manager中的SQL Server Query Analyzer工具此方法较简单只要输入存储过程语句并保存即可
创建存储过程的另一种方式是利用Delphi的控件如TQueryTADOQuery通过使用SQL语句在运行时动态地创建存储过程如下例所示
with query do
begin
paramcheck := false;
with SQL do
begin
clear;
add(create procedure proc);
add(@dw char());
add(as);
add(select dwdm from cchdwdm where dw=@dw);
end
execsql;
end;
三存储过程的参数
存储过程一般有四种参数类型
*输入参数由客户程序向存储过程传递
*输出参数由存储过程向客户传递
*输入/输出参数可双向传递
*状态参数由存储过程向客户返回错误信息
通过使用Delphi控件TADOStoredProc或TStoredProc来设置或获取存储过程的参数如
ADOStoredProcparametersparambyname(@name)value:=张三;
四在Delphi中使用存储过程的方法
在Delphi中使用存储过程有以下几个步骤
把TADOStoredProc或TStoredProc放到窗体上
设置参数连接到MS SQL Server数据库
设置ProcedureName参数指定存储过程名也可以在程序运行期设置
单击TParameters边上的省略号按钮如果设置正确则可看到所有的输入输出参数
在代码中设置存储过程的输入参数执行存储过程并获取返回的数据
通过调用TADOStoredProc控件的parambyname方法设置好所有的输入参数再调用open方法执行存储过程如果存储过程返回参数同样用parambyname方法获取参数值如果返回数据集则用访问数据集的TFields的方法获取各记录如以下代码所示
ADOStoredProcclose;
ADOStoredProcparametersparambyname(@dwmc)value:=某某单位;
ADOStoredProcprepared:=true;
ADOStoredProcopen;
labelcaption:= ADOStoredProcfields[]asstring;