Delphi XE2 下使用 SQLStoredProc1控件 获取不到存储过程返回的参数数据
如执行下面存储过程 获取不到@otp的数据CREATE PROCEDURE Test2
@para1 INT,
@otp MONEY OUTPUT
AS
BEGIN
SELECT * FROM dbo.TestCheck
    SET @otp=100+@para1
END
GOdelphi 下代码unit Unit1;interfaceuses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DBXMSSQL, Data.FMTBcd,
  Vcl.StdCtrls, Vcl.Buttons, Data.DB, Data.SqlExpr, Data.Win.ADODB;type
  TForm1 = class(TForm)
    SQLConnection1: TSQLConnection;
    SQLStoredProc1: TSQLStoredProc;
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    ADOStoredProc1: TADOStoredProc;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  SQLStoredProc1.ParamByName('@para1').Value:=Edit2.Text;
  SQLStoredProc1.;
  Edit1.Text:= SQLStoredProc1.ParamByName('@otp').Value;
end;end.

解决方案 »

  1.   

    我使用的是cb2010,同样在多结果集问题上,dbexpress也不能解决,难道是bug
      

  2.   

      SQLStoredProc1.Close;
      SQLStoredProc1.StoredProcName := 'Test2';
      SQLStoredProc1.Params.ParamByName('@para1').Value := Edit2.Text; //整数
      SQLStoredProc1.Params.ParamByName('@otp').Value := null;
      SQLStoredProc1.ExecProc;
      Edit1.Text := SQLStoredProc1.Params.ParamByName('@otp').Value;
      

  3.   

    肯定是可以的  我这不就用的好好的
    Result := Parameters.ParamByName('@RETURN_VALUE').Value;//@RETURN_VALUE参数的Direction为pdReturnValue
        for i := Low(AParamName) to High(AParamName) do
          if Parameters.ParamByName(AParamName[i]).Direction = pdInputOutput then
            AParamValue[i] := Parameters.ParamByName(AParamName[i]).Value;
    我这代码你看下 应该就懂了  delphi还可以获取到proc自身返回值(成功0;不成功非0)
    然后你要制定参数返回的  需要有个direction 为 pdinputout的。
      

  4.   


    我指的是DBX控件中的SQLStoredProc1这个
      

  5.   

    怎么用这个控件? ado不行吗? 这个控件没用过啊。