delphi存储过程的使用

来源:互联网 发布:弹跳法术升级数据 编辑:程序博客网 时间:2024/05/18 00:01

摘要: delphi存储过程的使用实例:创建存储过程主要用SQL语句CREATE PROCEDURE来实现,并用“Exec语句+存储过程名”来执行已创建的存储过程。

存储过程
1.创建存储过程
创建存储过程主要用SQL语句CREATE PROCEDURE来实现,并用“Exec语句+存储过程名”来执行已创建的存储过程。
本示例是用存储过程来执行多表合并的操作。
操作步骤如下:
(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit和TDBGrid等组件。
(2)主要程序代码如下:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.add('create procedure '+Edit1.Text);    //创建存储过程
SQl.Add('as ');
SQL.Add('select k.学生编号,k.学生姓名,j.外语 FROM tb_stu AS k INNER JOIN tb_mark AS j ON k.学生编号 = j.学生编号 WHERE (((k.学生编号)=[j].[学生编号]))');
ExecSQL;
SQL.Clear;
SQL.Add('Exec '+Edit1.Text);    //执行存储过程
Open;
end;
2.对存储过程进行加密
在创建存储过程时,可以为存储过程加密,这样用户可以隐藏存储过程的文本,避免其他用户在存储过程属性中查看其语句,主要用WITH ENCRYPTION选项实现。在对存储过程加密前必须对已有的存储过程进行删除。
下面用存储过程的WITH ENCRYPTION选项来创建一个加密存储过程。
操作步骤如下:
(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit、TMemo和TDBGrid等组件。
(2)主要程序代码如下:
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('if EXISTS(SELECT name FROM sysobjects WHERE name='+QuotedStr(Trim(Edit1.Text))+' AND type = ''p'')');    //判断存储过程是否存在
SQL.Add('DROP PROCEDURE '+Trim(Edit1.Text));    //删除已有的存储过程
EXECSQL;
close;
SQL.Clear;
//为存储过程加密
SQL.Add('CREATE PROCEDURE '+Edit1.Text+' WITH ENCRYPTION AS '+Trim(Memo1.Text));
EXECSQL;
end;
3.用存储过程附加数据库
使用存储过程附加数据库可以方便地将没有连接的数据库附加到当前服务器上,只是在附加数据库前先将存储过程所在的数据库以手动方式附加到服务器上。附加数据库主要用系统存储过程sp_attach_db来实现。在存储过程中不可以用占位符N。
下面用存储过程将服务器以外的数据库附加到服务器上,只适用于英文数据库名。
操作步骤如下:
(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton和TEdit等组件。
(2)主要程序代码如下:
创建一个含有参数的存储过程。
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('CREATE PROCEDURE '+Trim(Edit4.Text));
SQL.Add('@Table varchar(20),');
SQL.Add('@date varchar(200),');
SQL.Add('@LOG varchar(200)');
SQL.Add('AS');
SQL.Add('EXEC sp_attach_db @dbname=@Table,@filename1=@date,@filename2 =@LOG');
EXECSQL;
end
执行带参数的存储过程。
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('if EXISTS(SELECT name FROM sysobjects WHERE name='+QuotedStr(Trim(Edit4.Text))+' AND type = ''p'')');    //判断存储过程是否存在
//以传参的形式调用存储过程
SQL.Add('EXEC '+Trim(Edit4.Text)+' @Table='+QuotedStr(Trim(Edit1.Text))+',@date='+QuotedStr(Trim(Edit2.Text))+ ',@LOG='+QuotedStr(Trim(Edit3.Text)));
EXECSQL;
end;
4.用存储过程备份数据库
备份数据库与附加数据库所用的方法基本相同,只是备份数据库用SQL语句BACKUP DATABASE来实现,而附加数据库则用系统存储过程sp_attach_db来实现。
下面利用存储过程对服务器上的任意数据库进行备份。
操作步骤如下:
(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton和TEdit等组件。
(2)主要程序代码如下:
创建一个含有参数的存储过程。
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('CREATE PROCEDURE '+Trim(Edit3.Text));
SQL.Add('@name varchar(20),');
SQL.Add('@way varchar(200)');
SQL.Add('AS');
SQL.Add('backup database @name to disk=@way');
EXECSQL;
Showmessage('存储过程'+Edit3.Text+'创建成功。');
end
执行存储过程备份数据库。
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('if EXISTS(SELECT name FROM sysobjects WHERE name='+QuotedStr(Trim(Edit3.Text))+' AND type = ''p'')');    //判断存储过程是否存在
//以传参的形式调用存储过程
SQL.Add('EXEC '+Trim(Edit3.Text)+' @name='+Trim(ComboBox1.Text)+',@way='+QuotedStr(Trim(Edit2.Text)));
EXECSQL;
end;