ADOStoredProc调用存储过程后,如何获得存储过程Return的值MS-SQL2000:
CREATE PROCEDURE [dotest] 
@userID VARCHAR(10)
AS
----中间是处理过程,会有不同的RETURN x
RETURN 3
GODELPHI6:
ADOStoredProc1.ProcedureName:='dotest';
ADOStoredProc1.Parameters.CreateParameter('@ID',ftString,pdInput,10,uId);
//ADOStoredProc1.Parameters.CreateParameter('@Result',ftSmallint,pdReturnValue,10,0); //即使声明成pdReturnValue也不行,提示参数太多
ADOStoredProc1.ExecProc;

解决方案 »

  1.   

    终于明白了,关键是句
      Parameters.refresh;执行这句后,会自动获取存储过程的入口参数,同时在[0]生成@RETURN_VALUE这个参数名用来保存返回的参数。ADOStoredProc1.ProcedureName:='dotest'; 
    ADOStoredProc1.Parameters.refresh;
    ADOStoredProc1.Parameters[1].value:='test'  //[0]是自动增加的变量名,自己的从[1]开始
    ADOStoredProc1.ExecProc;
      

  2.   

    refresh可以取得存储过程的参数,但是并不是所有DBMS都支持。一般只对MS的数据库有效,比如Oracle目前所使用的驱动基本不支持refresh.
      

  3.   

    除了用默认参数获取return外,可以在存储过程里输入output参数:
    例如:
    create procedure [dotest] 
    @userID VARCHAR(10), 
    @i_out int output  //此乃存储输出值
    ....
      

  4.   


    declare  @i  int 
    declare  @userID  varchar(10)execute @i = dotest @UserID select @i
      

  5.   


    declare  @i  int 
    declare  @userID  varchar(10)execute @i = dotest @UserID outputselect @i