存储过程,动态创造TADOStoredProc,偶尔提示需要参数@o_ID,但未提供该参数

存储过程,动态创建TADOStoredProc,偶尔提示需要参数@o_ID,但未提供该参数
动态创建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 OUTPUT

AS
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;

------解决方案--------------------
ADOStoredProc1.Parameters.AddParameter
先添加参数
------解决方案--------------------
类似这样使用:
Parameters.Clear;
Parameters.CreateParameter('@sdt',ftString,pdInput,25,s);
...
Parameters.CreateParameter('@o_id',ftInteger,pdOutput,0,0);
ExecProc;