Delphi与SQL Server存储过程编程详解


本文整理自网络,侵删。

 Delphi与SQL Server存储过程编程详解

 



前言  
    经常有很多初学者问到在delphi中如何调用SQL Server的存储过程?问题其实很好解决,但问得多了,也就不愿答了。下面我将用实例进行说明,从在SQL Server中创建存储过程到调用的完整实例。 
 
    首先,打开sql server管理器,在pubs数据库中建一个测试表,表名为test,字段有id,name,和desc,全部为字符型,如果你不知道建表,那么打开sql查询分析器,贴上以下的代码,然后按执行,就会自动生成test表. 
use pubs 
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
drop table [dbo].[test] 
GO 
 
CREATE TABLE [dbo].[test] ( 
 [id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , 
 [name] [char] (12) COLLATE Chinese_PRC_CI_AS NULL , 
 [descrip] [char] (30) COLLATE Chinese_PRC_CI_AS NULL  
) ON [PRIMARY] 
GO 
 
        然后,我们来创建一个存储过程,其功能为在test中插入一条新记录.创建存储过程的代码如下,同样的,你也可以复制到查询分析器里直接执行就可以: 
CREATE PROCEDURE myInsert  
@id char(10) , 
@name varchar(12),  
@descrip varchar(30) 
 
AS 
begin 
 
insert into test (id,name,descrip) values (@id,@name,@descrip) 
 
if @@rowcount=0 
begin 
  raiserror('error',16,1) 
  rollback transaction 
end 
end 
GO 
 
        接下来,新建一个工程文件,在form1上放置如下控件,并设置属性(括号内): 
一个ADOConnection1: TADOConnection; 
      (LoginPrompt:=false; 
       connectionstring:=Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=pubs;Data Source=(local);) 

一个ADOStoredProc1: TADOStoredProc;属性为: 
      (connection:=adoconnection1; 
       procedurename:=myinsert;//上面我们创建的那个) 

一个ADOTable1: TADOTable;属性为: 
      (connection:=adoconnection1; 
      tablename:=test;    //上面我们创建的那个) 

一个Datasource1,属性为: 
     (dataset:=Tadotable;) 

一个 DBGrid1: TDBGrid;属性为 
     (datasource:=datasource1;) 

一个Button1,在其Onclick中写到: 
  with adoStoredproc1 do 
  begin 
    Parameters.ParamByName('@id').Value := '2'; 
    parameters.ParamByName('@name').Value := 'myname'; 
    parameters.ParamByName('@descrip').Value :='nosubject'; 
    ExecProc; 
  end; 
  Adotable1.Close; 
  adotable1.Open; 
 
delphi调用sql存储过程,并获取结果 
adostoredproc1.Close; 
adostoredproc1.ProcedureName:=’sp_thchl’; 
adostoredproc1.Parameters.Clear;
 adostoredproc1.Parameters.CreateParameter(’out’,ftInteger,pdoutput,1,1); 
adostoredproc1.ExecProc; 
edit1.Text :=adostoredproc1.Parameters[0].Value;

 

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;

相关阅读 >>

Delphi 用dll实现插件的简单演示

Delphi xe5也可以开发 google glass应用

Delphi中datetimepicker组件介绍

Delphi linklabel1 用法

Delphi日期和时间

Delphi 循环 low high 用法

Delphi xe7实现的登录窗体的正确用法示例

Delphi中webbrowser自动登录路由器网页

Delphi ip地址转换

Delphi toscilloscope 仿windows任务管理器cpu使用记录组件

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...