数据库:SQL SERVER2000
环境:D7 UPDATE1;
控件:AdoStoreProc问题:执行一个存储过程,会返回一个结果集和一个返回值。使用AdoStoreProc.Open或AdoStoreProc.execproc,都只能返回结果集,无法返回 返回值。
1.存储过程没有问题,在sql的查询分析器中调试可以返回结果集和返回值
2.代码中已正确定义有关参数,如下: with SPGetId do
begin
Close;
ProcedureName := 'sp_pageview';
Parameters.Clear;
Parameters.Refresh; Parameters.ParamByName('@tbname').Value := 'Tb_clientInfo';
parameters.ParamByName('@FieldKey').Value := 'ClientId';
parameters.ParamByName('@PageCurrent').Value := Pagecount;
parameters.ParamByName('@PageSize').Value := 5;
parameters.ParamByName('@FieldShow').Value := '*';
parameters.ParamByName('@FieldOrder').Value := 'ClientId desc';
parameters.ParamByName('@Where').Value := '';
parameters.ParamByName('@PageCount').Value := -1;
Open;
MaxPageCount := SPGetId.Parameters.PARAMBYNAME('@PageCount').Value;
end; 返回值@PageCount无法有效取回 请问有何解决方法!
环境:D7 UPDATE1;
控件:AdoStoreProc问题:执行一个存储过程,会返回一个结果集和一个返回值。使用AdoStoreProc.Open或AdoStoreProc.execproc,都只能返回结果集,无法返回 返回值。
1.存储过程没有问题,在sql的查询分析器中调试可以返回结果集和返回值
2.代码中已正确定义有关参数,如下: with SPGetId do
begin
Close;
ProcedureName := 'sp_pageview';
Parameters.Clear;
Parameters.Refresh; Parameters.ParamByName('@tbname').Value := 'Tb_clientInfo';
parameters.ParamByName('@FieldKey').Value := 'ClientId';
parameters.ParamByName('@PageCurrent').Value := Pagecount;
parameters.ParamByName('@PageSize').Value := 5;
parameters.ParamByName('@FieldShow').Value := '*';
parameters.ParamByName('@FieldOrder').Value := 'ClientId desc';
parameters.ParamByName('@Where').Value := '';
parameters.ParamByName('@PageCount').Value := -1;
Open;
MaxPageCount := SPGetId.Parameters.PARAMBYNAME('@PageCount').Value;
end; 返回值@PageCount无法有效取回 请问有何解决方法!
解决方案 »
- DBExpress除了手工设置Driver的值,还有其他方法?
- ADOQuery传递参数的问题
- 用NMFTP控件上传,下载文件时如何显示进度?(不够再加分online-waiting)
- 请推荐一种表格控件,(不用数据库也能用的)
- 我在MDI程序运行时启动了一个线程。线程执行中设置MDI子窗口的一个控件Edit的Text为一个字符串,但是程序报错;如若设置MDI主窗口则正确
- 急,怎么样通过DELPHI写的DLL把数值传给PB写的函数????真的很急,项目等着上!!!!!!
- qrreport打印detail和pagefooter之间空白解决方法
- 我在上台湾的网站时,显示的是乱吗,有没有解决的方法,大家看看。!
- 各位大哥哥大姐姐,能帮我解决一个ADO的问题吗?
- 如何处理三层结构中服务端死机或掉线的连接问题?
- 怎么解决数据流问题
- 【FORM窗口遍历所有控件,包括控件中包含的控件】
我在D6下测试没有问题。 with ADOStoredProc1 do
begin
Close;
ProcedureName := 'p_test';
Parameters.Clear;
Parameters.Refresh; Parameters.ParamByName('@a').Value := 12;
Parameters.ParamByName('@b').Value := 0;
Open;
ShowMessage(vartostr(Parameters.PARAMBYNAME('@b').Value));
end;create proc p_test
@a int,
@b int output
as
begin
select @b=@a*@a
select @a,@b
end
parameters.refresh就会动态刷新了。
//一般的输入参数,不用设置direction,只有输出参数才需要。//输出参数要赋值,随便给一个合语法的值,在存储过程执行后手动取得输出参数的值
sp_allmoney.Connection := con_SystemLog;
sp_allmoney.Close;
sp_allmoney.ProcedureName := 'PrGm_GetCash';
sp_allmoney.Parameters.Refresh;
sp_allmoney.Parameters.ParamByName('@inbSilverCloudNet').Direction := pdoutput;
sp_allmoney.Parameters.ParamByName('@inbSilverCloudNet').Value := inbSilverCloudNet; sp_allmoney.Parameters.ParamByName('@inb99Bill').Direction := pdoutput;
sp_allmoney.Parameters.ParamByName('@inb99Bill').Value := inb99Bill; sp_allmoney.Parameters.ParamByName('@inbSilver168').Direction := pdoutput;
sp_allmoney.Parameters.ParamByName('@inbSilver168').Value := inbSilver168; sp_allmoney.Parameters.ParamByName('@inbSilverSMS').Direction := pdoutput;
sp_allmoney.Parameters.ParamByName('@inbSilverSMS').Value := inbSilverSMS; sp_allmoney.Parameters.ParamByName('@inySort').Value := UUserLogin.lSort;
sp_allmoney.ExecProc;
if sp_allmoney.parameters.parambyname('@Return_Value').value=1 then//这里取得返回结果
begin
FlatEdit1.Text := sp_allmoney.Parameters.ParamByName('@inbSilverSMS').Value;
FlatEdit2.Text := sp_allmoney.Parameters.ParamByName('@inbSilver168').Value;
FlatEdit3.Text := sp_allmoney.Parameters.ParamByName('@inbSilverCloudNet').Value;
FlatEdit4.Text := sp_allmoney.Parameters.ParamByName('@inb99Bill').Value;
end;
Open;//用于有返回集
两个不能通用的
set @param = ... 或者 select @param = ... 是不行的,
必须是在定义参数的时候 定义 output 参数
只能将其设置为Null,否则无法得到正确值。windindance提到d6下面测试没有问题,这个我还没有测试。分迟一点结给大家,谢谢