怎么调用存储过程的返回值? (50分)

  • 主题发起人 主题发起人 代码雪儿
  • 开始时间 开始时间

代码雪儿

Unregistered / Unconfirmed
GUEST, unregistred user!
Sybase写的存储过程,Delphi调用,
·存储过程只有一个输入参数
·存储过程自己有一个返回值
·D6中用storedProc调用
我怎么调用存储过程自己的返回值?
·分数不多,不要意思。
·谢谢。。。(着急中。。。)
 
存储过程的参数要设为 output
 
·只有一个输入的参数,当然是input的 。没有output的参数!!
·只有存储过程自己有返回值
 
Result := StoreProcedureName.paramByName('Param').Value;
 
不是说了吗?
难道是我胡涂了?
存储过程里没有写输出参数呀
输入参数是:@issueID
 
不知道你要返回什么值,
最后用它试试:return(.. )

 
query1.sql.add('exec 存储过程名 @issueid=xxx')

然后和正常query一样用
 
要创建向数据表中输入数据的存储过程,代码编写举例如下:

  CREATE PROC ProcTest1

  @inttest smallint

  ,@strtest char(4) output

  AS

  INSERT INTO TEST_User.TRANS_TEST

  VALUES(@inttest,@strtest)

  SELECT @strtest,* FROM TEST_User.TRANS_TEST

以上代码向数据表 TEST_User.TRANS_TEST 添加数据,该数据表包括两个字段:第一个字段为 smallint 类型的数据,参数类型定为 Input(在存储过程中可缺省);第二个字段数据为长度为4 的字符类型,参数类型为 Output。

  其模块程序的编写与 DataInsert 过程相似,区别主要在于模块的中间部分,对应的主要代码如下:

  StoredProc1.Close;

  {关闭存储过程}

  StoredProc1.Params[1].ParamType := ptInput;

  {设置存储过程的参数类型}

   StoredProc1.Params[1].AsInteger := 1;

  {设置存储过程中参数的数据}

  StoredProc1.Params[2].ParamType := ptOutput;

  toredProc1.Params[2].AsString := 'abcd';

  StoredProc1.Open; {打开存储过程}

其中,StoredProc1 是 TStoredProc 类型的构件名称;Params[1] 是存储过程中的第一个参数,对应存储过程 ProcTest1 可以用ParamByName('@inttest')代替;存储过程的第二个参数与其类似。
 
楼上是什么意思,好像文不对题.
 
也就是这样的意思。 通过OutPut参数返回
太久没用BDE,都忘了:

http://www.cx66.com/cxgzs/program/delphi/928.htm
三、存储过程的参数
存储过程一般有四种参数类型:
输入参数,由客户程序向存储过程传递
输出参数,由存储过程向客户传递
输入/输出参数,可双向传递
状态参数,由存储过程向客户返回错误信息
通过使用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;

 
没有输出参数,就把输入参数传入
然后当普通DataSet一样处理
 
把输入参数的表达式反过来写就是了
来自:xianguo, 时间:2002-8-24 20:35:00, ID:1285193
Result := StoreProcedureName.paramByName('Param').Value;
这里不是很清楚吗
 
我觉得wolfsong得有得一试试。。
 
在 D5里,在编辑状态下打开存储过程,StoreProc自动创建参数表,默认Params[0]存储存储过程的返回值,1~n传递参数
D6也应该这样吧,那你执行后直接访问Params[0]就行了,就不用麻烦了
 
多人接受答案了。
 
后退
顶部