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