动态创建TADOStoredProc控件,连接adoconnection后;    spStartLh.ProcedureName :='LhStartInfo;1';
    spStartLh.Parameters.Refresh;    在执行时偶尔(不一定都会,是偶尔)会报错:          过程 'LhStartInfo‘  需要参数@o_ID,但未提供该参数。存储过程如下:
CREATE PROCEDURE LhStartInfo
@channel int ,
@sdt varchar(25),
@xmmc varchar(60),
@Tm varchar(50),
@o_id bigint OUTPUTAS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERT INTO StartLh(channel,sdt,xmmc,state,tm) VALUES (@channel,@sdt,@xmmc,'未完成',@Tm)
SET @o_id = @@IDENTITY
END
END
GO
执行时如下:      with spStartLh do
      begin
        close;
        s:=dateTimetoStr(self.dt);
        Parameters.ParamValues['@sdt']:=s;
        Parameters.ParamValues['@channel']:=TongDao;
        Parameters.ParamValues['@xmmc']:=self.xmmc;
        Parameters.ParamValues['@Tm']:=self.Tm;
        Parameters.ParamValues['@o_id']:=0;
        Prepared:=true;
        ExecProc;
        result:=Parameters.ParamValues['@o_id'];
        dbid:=result;
      end;

解决方案 »

  1.   

    ADOStoredProc1.Parameters.AddParameter
    先添加参数
      

  2.   

    类似这样使用:
    Parameters.Clear;
    Parameters.CreateParameter('@sdt',ftString,pdInput,25,s);
    ...
    Parameters.CreateParameter('@o_id',ftInteger,pdOutput,0,0);
    ExecProc;
      

  3.   

    二位所说的都是添加参数.应该是可以解决问题。可是我这样应该是自动刷参数出来啊。  spStartLh.ProcedureName :='LhStartInfo;1';
      spStartLh.Parameters.Refresh;  //这样参数也会出来。
    只是不明白为什么偶尔会出错。而在大部份时间时是可以用的。。