动态创建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;
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;
先添加参数
Parameters.Clear;
Parameters.CreateParameter('@sdt',ftString,pdInput,25,s);
...
Parameters.CreateParameter('@o_id',ftInteger,pdOutput,0,0);
ExecProc;
spStartLh.Parameters.Refresh; //这样参数也会出来。
只是不明白为什么偶尔会出错。而在大部份时间时是可以用的。。