存储过程如下:
CREATE PROCEDURE myAdd 
   @Num1 int,
    @Num2 int,
    @Sum  int output
AS
BEGIN
    SET NOCOUNT ON;    set @Sum=@Num1+@Num2;
     return 1;
END代码如下:
  ADOStoredProc1.ProcedureName:='MyAdd';//存储过程名称
  ADOStoredProc1.Parameters.clear;  ADOStoredProc1.Parameters.CreateParameter('@Num1',ftInteger,pdInput,4,1); //输入参数
  ADOStoredProc1.Parameters.CreateParameter('@Num2',ftInteger,pdInput,4,2); //输入参数
  ADOStoredProc1.Parameters.CreateParameter('@Sum',ftInteger,pdOutput,4,2);//输出参数      ADOStoredProc1.ExecProc;
  Edit1.Text:=IntToStr(ADOStoredProc1.Parameters.ParamByName('@Sum').Value);  Edit2.Text:=inttostr(ADOStoredProc1.Parameters.ParamByName('@return_value').Value);//返回值
 
  错误提示 ADOStoredProc1 默认的 @return_value 参数没有发现,请问这是什么问题,谢谢了

解决方案 »

  1.   

    在上面建立参数时,@Retrun_Value同样要建立。
      

  2.   

    eg:ADOStoredProc1.close; 
    ADOStoredProc1.parameters.parambyname(’@dwmc’).value:=’某某单位’;   
    ADOStoredProc1.prepared:=true; 
    ADOStoredProc1.open; 
    label1.caption:=   ADOStoredProc1.fields[0].asstring;procedure TForm1.Button1Click(Sender: TObject);
    begin  //根据动态赋参数序号赋值
     ADOStoredProc1.Close;
     DataSource1.DataSet:=ADOStoredProc1;
     ADOStoredProc1.ProcedureName:='成绩查找';
     ADOStoredProc1.Parameters.Refresh;
     ADOStoredProc1.Parameters[1].Value:=200301001;
     ADOStoredProc1.Parameters[2].Value:=4;
     ADOStoredProc1.Parameters[3].Value:='SQL数据库';
     ADOStoredProc1.Open;
    end;procedure TForm1.Button5Click(Sender: TObject);
    begin  //根据动态赋参数名称赋值
     ADOStoredProc1.Close;
     DataSource1.DataSet:=ADOStoredProc1;
     ADOStoredProc1.ProcedureName:='成绩查找';
     ADOStoredProc1.Parameters.Refresh;
     ADOStoredProc1.Parameters.ParamByName('@学号').Value:=200301001;
     ADOStoredProc1.Parameters.ParamByName('@学期').Value:=4;
     ADOStoredProc1.Parameters.ParamByName('@课程名称').Value:='SQL数据库';
     ADOStoredProc1.Open;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin //提取存储过程返回值
     ADOStoredProc1.Close;
     ADOStoredProc1.ProcedureName:='带返回值的成绩查找';
     ADOStoredProc1.Parameters.Refresh;
     ADOStoredProc1.Parameters.ParamByName('@学号').Value:=200301001;
     ADOStoredProc1.Parameters.ParamByName('@学期').Value:=4;
     ADOStoredProc1.Parameters.ParamByName('@课程名称').Value:='SQL数据库';
     ADOStoredProc1.Parameters.ParamByName('@结果').Value:=null;
     ADOStoredProc1.ExecProc;
     Edit1.Text:=IntToStr(ADOStoredProc1.Parameters.ParamByName('@结果').Value);
    end;procedure TForm1.Button3Click(Sender: TObject);
    var i:integer;//提取存储过程返回的多个结果集的方法,
    begin //返回第一个结果集
     DataSource1.DataSet:=ADODataSet1;
     if Button3.Caption='返回第一个结果集' then
     begin
       ADOStoredProc1.Close;
       ADOStoredProc1.ProcedureName:='学生';
       ADOStoredProc1.Open;
       ADODataSet1.Recordset:=ADOStoredProc1.Recordset;
       Button3.Caption:='返回第二个结果集';
     end else
     begin
       ADODataSet1.Recordset:=ADOStoredProc1.NextRecordset(i);
       DataSource1.DataSet:=ADODataSet1;
       Button3.Caption:='返回第一个结果集';
     end;
    end;