使用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赋一个初始值,然后程序就可以调试通过了。