我用TADOQuery 执行 SQL 存储过程,但存储过程返回值是不以结果集形式返回的
请教各位大大,能用什么方法取到存储过程返回值
谢谢了

解决方案 »

  1.   

    必须用ADOStoredProc ,ADOQuery获取不到的。
    例:try
        ADOStoredProc := TADOStoredProc.Create(nil);
        ADOStoredProc.Connection := ADOConnection;    ADOStoredProc.ProcedureName := 'sp_存储过程1';    ADOStoredProc.Parameters.CreateParameter('Result', ftBoolean, pdReturnValue, 4, 0);
        ADOStoredProc.Parameters.CreateParameter('sid', ftInt, pdInput, 4, 0);
        ADOStoredProc.Parameters.CreateParameter('name', ftString, pdInput, 20, name);    ADOStoredProc.Prepared := True;
        ADOStoredProc.ExecProc;
        Result := ADOStoredProc.Parameters.ParamByName('Result').Value;  //这就是返回值
      finally
        ADOStoredProc.Free;
      end;
      

  2.   

    路过,问一句,请问DebugXP,用TADOQuery 执行 SQL 存储过程,返回值是不以结果集形式返回的,真的
    用ADOQuery得不到吗?必须用ADOStoredProc吗?
      

  3.   

    用ADOQUERY同样可以得到的:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.add('exec  存储过程名称 ');
      adoquery1.open;
    end;
      

  4.   

    with adoquery1 do
    begin
      Close;
      SQL.Clear;
      SQL.add('exec  proc_name p1,p2,p3');
      open;//用OPEN的方法,不要用EXECSQL,如果不行,你就在要存储过程的最后加上一条select语句
    end;
      

  5.   

    赞成ron_xin(星雨) 的建议,再后面加上Select语句。就ok了