……
var
  NUM:Integer; 
……
with ADOStoredProc1 do
 begin
    ProcedureName:='K999';//K999为存储过程名;(此行为第一行)
    Parameters.ParamByName('@Fint'):=vFItemClasID;//参数
    Prepared;
    ExecProc;
    NUM:=Parameters.ParamByName('@FFloat').Value;//返回值
 end;错误提示:没有找到参数@Fint;
于是我就吧第一行去掉,直接把ADOStoredProc1 与K999绑定就可以了
疑问:调用存储过程是否一定要绑定的吗?
      不能想adoquery那样可以临时赋值应用吗?
      如果可以代码要怎么写?

解决方案 »

  1.   

    不一定

    在第一行下面加Parameters.Refresh试下
      

  2.   

    指定参数:
    Parameters.ParamByName('@Fint').value:=vFItemClasID;
    建议先CLOSE
      

  3.   

    with ADOStoredProc1 do
     begin
        close;
        ProcedureName:='K999';//K999为存储过程名;(此行为第一行)
        Parameters.Refresh;
        Parameters.ParamByName('@Fint'):=vFItemClasID;//参数
        Prepared;
        ExecProc;
        NUM:=Parameters.ParamByName('@FFloat').Value;//返回值
     end;
      

  4.   

    with ADOStoredProc1 do
     begin
        close;
        ProcedureName:='K999';//K999为存储过程名;(此行为第一行)
        Parameters.Refresh;
        Parameters.ParamByName('@Fint'):=vFItemClasID;//参数
        Prepared;
        ExecProc;
        NUM:=Parameters.ParamByName('@FFloat').Value;//返回值
     end;
      

  5.   

    还是用ADOQuery吧
     self.ADOQuery1.Close;
       self.ADOQuery1.SQL.Clear;
       self.ADOQuery1.SQL.Add('EXEC K999'+‘参数’)   ;
       ADOQuery1.ExecSQL;
      

  6.   

    在第一行下面加Parameters.Refresh试下
      

  7.   

    只能绑定的,郁闷
    还是不行啊,有谁帮帮我啊,
    就是一个简单的掉用存储过程有带参数和返回值的;不让他与TAdoStoreProc绑定而已
      

  8.   

    with ADOStoredProc1 do
     begin
        close;
        ProcedureName:='K999';//K999为存储过程名;(此行为第一行)
        Parameters.Refresh;
        Parameters.ParamByName('@Fint'):=vFItemClasID;//参数
        Parameters.ParamByName('@FFloat').Value := 0;
        Prepared;
        ExecProc;
        NUM:=Parameters.ParamByName('@FFloat').Value;//返回值
     end;