存储过程,动态创办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;