读书人

使用ADOStoredProc组件最后获得存储

发布时间: 2012-04-05 12:42:40 作者: rapoo

使用ADOStoredProc组件,最后获得存储过程返回值式,怎么出错并提示“……未提供返回值”?
我的存储过程这样定义

CREATE PROCEDURE KangTC
@PinYin varchar(10),
@EndDate DateTime,
@GetTotalSale int output
as

……………………

然后在程序中

ADOStoredProc1.Close;
ADOStoredProc1.Parameters.Refresh;

ADOStoredProc1.Parameters.ParamByName( '@PinYin ').Value:=ADOQuery1.FieldByName( 'PinYin ').AsString;

ADOStoredProc1.Parameters.ParamByName( '@EndDate ').Value:=DateToStr(DateTimePicker1.Date);

ADOStoredProc1.ExecProc;
GetGetTotalSale:=ADOStoredProc1.Parameters.ParamByName( '@GetTotalSale ').Value;


我欲用整型变量GetGetTotalSale得到最后存储过程返回的结果也就是@GetTotalSale的值,但是程序运行报错,“……未提供返回值”

怎么办啊?

[解决办法]
没有设置output参数
[解决办法]
存储过程:
CREATE PROCEDURE KangTC(
@PinYin varchar(10),
@EndDate DateTime)
as
@GetTotalSale int
begin
。。。。。
select @getTotalsale /*最后输出*/
end
程序:

try
spSel :=TADOStoredProc.Create(nil);
spSel.ConnectionString :=_pos_db_conStr;
with spSel do
begin
close;
ProcedureName := 'KangTC;1 ';
Parameters.Refresh;
Parameters.ParamByName( '@PinYin ').Value := 'test ';
Parameters.ParamByName( '@EndDate ').Value :=now;
try
open;
if not eof then
GetGetTotalSale :=fields[0].AsInteger;
except
end;
end;
finally
spSel.Free;
end;
[解决办法]
在TADOStoredProc当中由使用Refresh而自动将所对应的存储过程的参数填充给TADOStoredProc本身的时候,默认会把所有的OutPut参数配置为pdInputOutput,所以在执行的时候ADO自身就会提示你需要对相应的参数值进行初始化,比如本例当中可以将参数@GetTotalSale赋一个初始值,然后程序就可以调试通过了。

读书人网 >.NET

热点推荐