在SQL裡執行存儲過程的時候,可以這樣寫:
DECLARE @r_Code int
EXECUTE @r_Code=AddStudent
這樣便得到了返回值。
在Delphi裡用ADOStoredProc控件的時候,怎麼得到返回值呢?

解决方案 »

  1.   

    直接提取ADOStoredProc1.Parameters.ParamByName('@r_Code').Value,但要先执行ExecProc
      

  2.   

    data.asp_common.ProcedureName:='savechange';
          data.asp_common.Parameters.Refresh;
          data.asp_common.Parameters[1].Value :=username;
          data.asp_common.Parameters[2].Value :=ls_str;
          data.asp_common.ExecProc;
          ls_str:=data.asp_common.Parameters[1].value
    备注Parameters[1].Value在过程中为输出参数
      

  3.   

    var
       TheReturnValue :Integer;
       、、、、、(执行存储过程)
      TheReturnValue := ADOStoredProc1.Parameters.ParamByName('返回参数字段')->Value;
      

  4.   

    YourValue:=ADOStoredProc1.Parameters.ParamByName('@r_Code').Value;
      

  5.   

    类似下面的:
    var
      sp : TStoredProc;
    begin
     sp := TStoredProc.Create(nil);
     with sp do
     begin
       DatabaseName := 'test';
       StoredProcName := 'dbwintech1.johnt;1';
       ExecProc;
       Caption := IntToStr(Params[0].AsInteger);
      Free;
     end;
    end;
      

  6.   

    with ADOStoredProc1 do
        begin
          Close;
          ProcedureName := 'OW_Pro_Orders';
          Parameters.Clear;
          i:=-1;
          Parameters.AddParameter;Inc(i);
          Parameters[i].DataType:=ftInteger;
          Parameters[i].Name:='@Return_Value';
          Parameters[i].Direction:=pdReturnValue;      Parameters.AddParameter;Inc(i);
          Parameters[i].DataType:=ftstring;
          Parameters[i].Name:='@OrdersNo';
          Parameters[i].Direction:=pdinput;
          Parameters[i].Value:=Trim(Edit_OrdersNo.text);      Parameters.AddParameter;Inc(i);
          Parameters[i].DataType:=ftString;
          Parameters[i].Name:='@Memo';
          Parameters[i].Direction:=pdinput;
          Parameters[i].Size:=512;
          Parameters[i].Value:=Memo.Text;
        end;    ADOStoredProc1.ExecProc;
        if ADOStoredProc.Parameters[0].Value=0 then//这个就是返回值
        begin
          myStatusBar.Panels[1].Text := '保存成功';
        end
        except
          on E:Exception do
          begin
            Application.MessageBox(pchar(E.Message),'',mb_ok);
            Self.DataModified:=True;
          end;
        end;
      

  7.   

    不过你的存储过程历史这样的:
    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GOALTER  PROCEDURE [pr_jc]
    @num_cal_val int,
            @res int output/*要有输出值*/
    AS
    begin
    declare @i int
    set @res=@num_cal_val
    while @num_cal_val>1
    begin
    set @res=@res*(@num_cal_val-1)
    set @num_cal_val=@num_cal_val-1
    endendGO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO