如何获取调用SQL存储过程后的结果值?
有一存储过程CREATE procedure stops_new1 @direction tinyint,@train_code varchar(4)
as
declare @selfno varchar(2),@train_no char(8),@limit varchar(2),@change bit,@answer nvarchar(255) ,@tim char(4),@L varchar(12),@code_out varchar(20),@train_code1 varchar(6),@status smallint
declare @my_station_name varchar(16),@i smallint,@answer1 nvarchar(255)
我想取回answer 和answer1的值,具体程序是:
StoredProc1->ParamByName("@direction")->AsSmallInt = 0;
StoredProc1->ParamByName("@train_code")->AsString="41"
if (StoredProc1->Prepared==false) StoredProc1->Prepare( );
StoredProc1->ExecProc( );
StoredProc1->Open();
StoredProc1->GetResults();
result=StoredProc1->ParamByName("answer")->AsString;
结果显示没有answer这个参数 ,我用FieldByName("answer")->AsString 也不行。
问题点数:26、回复次数:15Top
1 楼windindance(风舞轻扬·白首为功名)回复于 2001-08-15 12:58:47 得分 0
StoredProc1->ParamByName("@answer")->AsString;
procedure stops_new1
@direction tinyint,
@train_code varchar(4),
@Answer nvarchar(255) output
as
...
Top
2 楼dragon_lh()回复于 2001-08-15 14:33:09 得分 0
还是出现 Paramer "@answer" not foundTop
3 楼dragon_lh()回复于 2001-08-15 14:37:03 得分 0
此存储过程在VB中调用好好的,.Fields("answer")可取回值
换在CB中返回值不知怎么写Top
4 楼dragon_lh()回复于 2001-08-15 14:40:55 得分 0
快来救救我,解决了问题一定加分!Top
5 楼whitelion(www.ccproj.com)回复于 2001-08-15 14:53:11 得分 0
好象在bcb中,存储过程中没有返回值的
如果要返回值,需要改为query控件的select ....
帮你推推Top
6 楼dragon_lh()回复于 2001-08-15 15:18:52 得分 0
还是没有解决Top
7 楼windindance(风舞轻扬·白首为功名)回复于 2001-08-16 11:56:04 得分 10
实在不行,你就用Query->SQL->Text = "exec you_proc ...";吧。Top
8 楼dragon_lh()回复于 2001-08-17 08:47:37 得分 0
我用QUERY时说找不到存储过程stops_new这个对象. 用C++bUILDER 到底怎么才能取回SQL
Server 存储过程的返回值,各位知道此用法帮帮忙!Top
9 楼LuoGD(抢第一楼)回复于 2001-08-17 09:32:13 得分 0
关注中Top
10 楼windindance(风舞轻扬·白首为功名)回复于 2001-08-17 11:52:06 得分 0
用QUERY时说找不到存储过程stops_new这个对象?
1 有没有正确连接?
2 用ADO看看。
Top
11 楼dragon_lh()回复于 2001-08-17 11:57:49 得分 0
ADO我不会用,别人在VB中调用这个存储过程挺好的 Top
12 楼dragon_lh()回复于 2001-08-17 12:42:49 得分 0
存储过程大抵是这样:
CREATE procedure stops_new @direction tinyint, @train_code varchar(4)
as
declare @selfno varchar(2),@train_no char(8),@limit varchar(2),
@change bit,@answer nvarchar(255) ,@tim char(4),@L varchar(12),
@code_out varchar(20),@train_code1 varchar(6),@status smallint
declare @my_station_name varchar(16),@i smallint,
@answer1 nvarchar(255)
select @i=0
select @answer='',@answer1=''
declare c2 cursor for select train_no from tystops_time_bak
where @train_code=case
when substring(station_train_code,1,1) in ('T','K','L','Y')
then rtrim(substring(station_train_code,2,3))
else rtrim(station_train_code) end
open c2
fetch c2 into @train_no
while @@fetch_status=0
begin
select @i=@i+1
...
end
close c2
deallocate c2
if @i=0 /* 没有查到信息 */
begin
select '柚' as answer,'' as answer2 return
end
return
在VB中用ADO调用该存储过程时能正确返回answer answer2的值
现在通过c++ builder 的storeproc 调用存储过程,不管参数怎么设置.
结果为answer='柚' answer2 ='' .从存储过程看游标c2指向的第一行就不存在.事实上
这个查询是应有结果.Top
13 楼dragon_lh()回复于 2001-08-20 16:41:21 得分 0
谢谢大家的关注,这问题已获解决.
对于C++Builder调用SQL存储过程,若要获取结果集,一定要用TQuery,SQL语句这样写
exec 存储过程名 参数1名=值 ,参数2名=值. 还有一点我也不明白SQL存储过程中返回参数
不要用nvarchar类型 ,可用varchar类型. Top
14 楼shak(孙诗美)回复于 2001-08-21 02:30:31 得分 16
我爱你!!!!!
请给我分,我已经没有分了.就不能提问了,不幸的大白鲨
请帮助我
http://www.csdn.net/expert/TopicView.asp?id=244358 速成高手的问题????????100000风
http://www.csdn.net/expert/TopicView.asp?id=246638 大白鲨-高分请教
http://www.csdn.net/expert/TopicView.asp?id=224469 shak:报考2001年中级程序员和初级程序员请进!!!!
http://www.csdn.net/expert/TopicView.asp?id=224471 提议大家一起来汉化C++BUILDER
http://www.csdn.net/expert/TopicView.asp?id=244357 《C++Builder编程技巧全集》之“系统函数"Top
15 楼agecntao(火鸟)回复于 2001-08-21 08:29:03 得分 0
SQL存储过程也能返回纪录集(DataSet),只要用的是open方法,sp中有返回纪录的sql语句
如select
我的报表就用sp做的Top




