Delphi、MS SQL Server开发环境下存储过程的使用


======================================================
注:本文源代码点此下载
======================================================

曹次华

一、概述

delphi + ms sql server是目前最为流行的管理信息系统开发环境和工具。delphi的强大数据库操作控件极大地减轻了开发人员的工作量,在这些控件中,最常用的有tquery、ttable、tadoquery、tadotable、tadodatasete等,这些控件执行查询操作时有一个共同的特点,即将所有数据库记录从服务器取回客户端,再根据查询的条件进行筛选。很明显,如果有大量的数据在服务器与客户端之间传递,就会降低程序执行的速度,影响应用程序的性能。针对这种情况,ms sql server数据库和delphi开发工具都提供了存储过程来解决这类问题。存储过程是一段在服务器上执行的程序,它在服务器端对数据库记录进行处理,再把结果返回到客户端。通过使用存储过程,一方面可以利用服务器强大的计算能力和速度,另一方面避免把大量的数据从服务器下载到客户端,减少网络上传输量,服务器只需将计算结果传给客户端,其效率之高是非常明显的。

二、创建存储过程

在ms sql server上的存储过程可分为二类,一类是类似于select 查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户端,如

create procedure proc1

@dw char(20)

as

select dwdm from cchdwdm where dw=@dw

该存储过程有一个输入参数 @dwdm,以数据集的形式返回结果。

另一类存储过程是通过输出参数返回信息或不返回信息,或只执行一个动作。如:

create procedure proc2

@m1 smallint,

@m2 smallint

@result int output

as

select @result=@m1*@m2

该存储过程有二个输入参数@m1、@m2,还有一个输出参数@result。

按照创建存储过程的时机来划分,创建存储过程也有二种方式,一是利用ms sql server的enterprise manager中的sql server query analyzer工具,此方法较简单,只要输入存储过程语句并保存即可。

创建存储过程的另一种方式是利用delphi的控件,如tquery、tadoquery,通过使用sql语句在运行时动态地创建存储过程。如下例所示。

with query1 do

begin

paramcheck := false;

with sql do

begin

clear;

add('create procedure proc1');

add('@dw char(20)');

add('as');

add('select dwdm from cchdwdm where dw=@dw');

end

execsql;

end;

三、存储过程的参数

存储过程一般有四种参数类型:

输入参数,由客户程序向存储过程传递

输出参数,由存储过程向客户传递

输入/输出参数,可双向传递

状态参数,由存储过程向客户返回错误信息

通过使用delphi控件tadostoredproc或tstoredproc来设置或获取存储过程的参数,如:

adostoredproc1.parameters.parambyname('@name').value:='张三';

四、在delphi中使用存储过程的方法

在delphi中使用存储过程有以下几个步骤:

1、把tadostoredproc或tstoredproc放到窗体上。

2、设置参数连接到ms sql server数据库。

3、设置procedurename参数,指定存储过程名,也可以在程序运行期设置。

4、单击tparameters边上的省略号按钮,如果设置正确,则可看到所有的输入输出参数。

5、在代码中设置存储过程的输入参数、执行存储过程并获取返回的数据。

通过调用tadostoredproc控件的parambyname方法,设置好所有的输入参数,再调用open方法执行存储过程。如果存储过程返回参数,同样用parambyname方法获取参数值,如果返回数据集,则用访问数据集的tfields的方法获取各记录。如以下代码所示:

adostoredproc1.close;

adostoredproc1.parameters.parambyname('@dwmc').value:='某某单位';

adostoredproc1.prepared:=true;

adostoredproc1.open;

label1.caption:= adostoredproc1.fields[0].asstring;


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值