如何通过Query控件返回查询的结果(100分)

  • 主题发起人 主题发起人 谭俊峰
  • 开始时间 开始时间

谭俊峰

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL语句如下:
Declare @ID int
DECLARE C SCROLL CURSOR FOR
Select ID From Table1
where ID in (2,5,7,4)
OPEN C
.....//其他处理,得到@Row

FETCH ABSOLUTE @Row FROM C into @ID
Return @ID <-- ???????
本来可以用存储过程的,
但这样问题又卡在 “where ID in ”后面的整型类表,
无法由一个字符串传入参数,所以,
还得请各位帮忙。



 
使用字符串转换函数:convert(int,substring(@string1,1,2))
 
return @id
改成select @id
 
改成“select @id”Query会因为找不到光标而无法打开。
 
找不到光标?
你前面还有Select 语句吗?
 
将:DECLARE C SCROLL CURSOR FOR
Select ID From Table1
where ID in (2,5,7,4)
改为:
EXECUTE('DECLARE C SCROLL CURSOR FOR Select ID From Table1
where ID in ' + @para )

@para为存储过程的参数!

别忘了把分给我呦!^-^
 
to Aloney:
高兴的太早了吧,
你说的“EXECUTE”和“Select”有什末区别,
还是得用Query控件,怎莫返回值啊?
 
不明白呀?
 
我没看懂你的提问,请具体一点
 
应给Aloney加分!!!
这种情况用动态执行是最好的了!!!
 
I don't know.
 
各位,
这是一个比较久远的问题了,我有必要在解释以下:
执行存储过程可以利用TStoredProc,通过它的(TParams)可以得到返回值,
TQuery控件也有(TParams),可以在SQL语句中在变量前加“:”来标示,
但如果SQL语句中包含“DECLARE C SCROLL CURSOR FOR”等类似语句就不好使了。
可能我对Aloney 的意思没有看懂,
时隔这么久了,如果Aloney 能碰巧看到这个问题,
烦劳能为我做个简单的小程序,不胜感激。



 
谭俊峰:
我看到了你的回复,解释如下:CURSOR是服务器上的功能,因此要在服务器上执行,
所以不能在TQuery组件中用SQL语句建立,要用存储过程,例如:
CREATE PROCEDURE sp_test( @p varchar(255) ) AS
Declare @ID int
EXECUTE( 'DECLARE C SCROLL CURSOR FOR Select ID From Table1 where ID in ' + @p )
OPEN C
.....//其他处理,得到@Row
FETCH ABSOLUTE @Row FROM C into @ID
Return @ID /* 返回值 */

在DELPHI中,可以传递@p参数,例如:
storeproc1.ParamByName('@p').AsString := '(2,3,4,5)'
storeproc1.Execute
DELPHI处理storeproc的返回值是使用了一个名为RESULT的参数,可以这样得到返回值:
i := storeproc1.ParamByName('Result').AsInteger;
注意:storeproc有二种类型,一种是不返回结果集的,一种是返回结果集的,上面的
storeproc不返回结果集,所以可以RESULT参数得到返回值,但是如果返回结果集,
就没有RESULT参数可用。可以把它和一个DBGRID相联,来查看结果集。
不知你是否清楚了?
Aloney 2000/9/26

 
谢谢Aloney的解释,我测试了以下,工作正常。
都怪我不好,问题没表诉清楚,理解力又太差,
让Aloney等的这么久,深感不安,
同时对您如此及时详细的答复再次表示感谢。
 
后退
顶部