DELPHI中关于调用SQL SERVER存储过程???(高分相送)
SQL SERVER存储过程如下 :
CREATE PROCEDURE MZSF_XMJG123
(
@xmdh numeric(5,0)
)
AS
declare @jg money
begin
if exists( select jg1 from yp_ypjgsd where xmdh=@xmdh)
begin
select @jg=( select jg1 from yp_ypjgsd where xmdh=@xmdh)
end
else
select @jg=0
end
我在DELPHI这样用:
with query1 do
begin
close;
sql.clear;
sql.add('mzsf_xmjg123 :xmdh');
parambyname('xmdh').asinteger:=1123;
open;
end;
运行时提示:‘Error Creating Cursor handle’
用存储过程也不行!
但是如果存储过程这样写:
CREATE PROCEDURE MZSF_XMJG
(
@xmdh numeric(5,0)
)
AS
begin
select jg1 as jg
from yp_ypjgsd
where xmdh=@xmdh
end
这样调用:
with query1 do
begin
close;
sql.clear;
sql.add('mzsf_xmjg :xmdh');
parambyname('xmdh').asinteger:=1123;
open;
end;
就不会出错有返回结果!
希望大家能有一个好的办法,我要在存储过程中判断是否合理可能有很多判断条件,只要最终返回自己需要的返回结果就可以了!
不要改变原来的意图(因为只有一个返回结果我可以很容易判断)
问题点数:100、回复次数:13Top
1 楼chechy(www.qdocuments.net)回复于 2002-03-19 09:45:43 得分 10
为什么不用TStoredProc控件?如果返回数据集,用storedProc1.Open,否则就用storedProc1.ExecProc;Top
2 楼liuziran(.NET图表组件开发商 http://www.isoftone.com)回复于 2002-03-19 09:50:19 得分 40
select @jg=( select jg1 from yp_ypjgsd where xmdh=@xmdh)
一句改成:
select @jg=jg1 from yp_ypjgsd where xmdh=@xmdh)
Top
3 楼boyqing(阿清)回复于 2002-03-19 09:55:07 得分 0
To:liuziran(倒立旋风转的青蛙)
select @jg=( select jg1 from yp_ypjgsd where xmdh=@xmdh)
一句改成:
select @jg=jg1 from yp_ypjgsd where xmdh=@xmdh)
还是不行呀
Top
4 楼genphone_ru(哎,什么都要学,真累)回复于 2002-03-19 09:57:49 得分 40
with query1 do
begin
close;
sql.clear;
sql.add('Execute mzsf_xmjg123 :xmdh');
parambyname('xmdh').asinteger:=1123;
ExecSQL;
end;
Top
5 楼liuziran(.NET图表组件开发商 http://www.isoftone.com)回复于 2002-03-19 10:05:05 得分 0
如果要输出@jg的话,应该声明:
CREATE PROCEDURE MZSF_XMJG123
(
@xmdh numeric(5,0),
@jg money output
)
AS
...Top
6 楼boyqing(阿清)回复于 2002-03-19 10:10:20 得分 0
回复: genphone_ru(票票)
不行,还是老样子Top
7 楼humer(大刀杀蚂蚁)回复于 2002-03-19 10:20:55 得分 5
别用了tquery了,用tstoreproc来调用存储过程。Top
8 楼blackfiles(一个和尚挑水喝)回复于 2002-03-19 10:22:50 得分 5
同意liuziran的,
首先过程里面要有输出声明,程序执行才可以得到返回值哦。Top
9 楼boyqing(阿清)回复于 2002-03-19 10:31:10 得分 0
用tstoreproc来调用存储过程
问题依然一样Top
10 楼outer2000(天外流星)回复于 2002-03-19 10:33:49 得分 0
不可以用游标Top
11 楼boyqing(阿清)回复于 2002-03-19 10:39:22 得分 0
难道说程序执行得到返回值一定要首先在在存储过程里面输出声明吗?Top
12 楼chechy(www.qdocuments.net)回复于 2002-03-19 12:04:57 得分 0
用stroedProc1.Open来执行。Top
13 楼boyqing(阿清)回复于 2002-03-21 08:37:39 得分 0
对于大家回答非常感谢!
问题还是自己解决吧Top




