如何用 quey 动态地调用 SQLSERVER 2000 的存储过程?
如何用 quey 动态地调用 SQLSERVER 2000 的存储过程?存储过程中有输入输出参数,输出参数为整数。
请各位高手多多指教。
问题点数:60、回复次数:26Top
1 楼zjingl(风)回复于 2005-06-01 20:01:21 得分 0
放心吧!我的分多的是,答对了一定给分。Top
2 楼freewind88(风林火山)回复于 2005-06-01 20:14:21 得分 0
动态创建参数Top
3 楼vfork(學習htm、css、js、java,然後到ajax。)回复于 2005-06-01 20:18:08 得分 0
Query.SQL.Add('p_exporttb 过程名');
Query.Excute;Top
4 楼smiler007(笑一笑)回复于 2005-06-01 20:19:44 得分 0
怎么不用StoredProc控件或者AdoStoredProc控件呢?Top
5 楼xinshiji(自由我有)回复于 2005-06-01 20:24:41 得分 0
怎么不用StoredProc控件或者AdoStoredProc控件呢?Top
6 楼jkx01whg(爱迪01)回复于 2005-06-01 20:25:26 得分 0
upTop
7 楼zjingl(风)回复于 2005-06-02 16:42:27 得分 0
vfork(珠江水洗鸡巴)Top
8 楼zjingl(风)回复于 2005-06-02 16:46:36 得分 0
TO vfork(珠江水洗鸡巴)
请给出详细代码。
存储过程中要有输入输出参数,输出参数为整数。
Top
9 楼zjingl(风)回复于 2005-06-02 16:49:08 得分 0
如果没有输出参数我也会。Top
10 楼advancejar(金谜)回复于 2005-06-02 16:51:59 得分 0
看书上说
DELPHI 7.0 的那个存储过程的控件不知道SQL Server2000的输出函数
我不认为这是真的
所以关注这个帖子Top
11 楼zjingl(风)回复于 2005-06-02 16:52:00 得分 0
TO smiler007(笑一笑)
我想在三层结构中动态调用。Top
12 楼zjingl(风)回复于 2005-06-03 18:17:49 得分 0
没人懂吗?
真遗憾!
Top
13 楼delphiseabird(沙鸥)回复于 2005-06-03 18:28:27 得分 0
excute urProc parm1,parm2,...
执前可以传入参数,执行后可以取出参数
---------------------------------------
欢迎访问 http://www.coderpub.com 技术论坛Top
14 楼zjingl(风)回复于 2005-06-03 18:33:47 得分 0
TO delphiseabird(沙鸥)
请给出详细代码好吗?
Top
15 楼zjingl(风)回复于 2005-06-03 18:37:59 得分 0
TO delphiseabird(沙鸥)
包括动态参数的建立,输出参数为整数.Top
16 楼under()回复于 2005-06-04 10:41:52 得分 0
怎么不用StoredProc控件或者AdoStoredProc控件呢?
Top
17 楼zjingl(风)回复于 2005-06-04 16:50:00 得分 0
to under()
我想在三层结构中动态调用。Top
18 楼zjingl(风)回复于 2005-06-05 17:25:09 得分 0
难道真的没有人用过吗?真的令人觉得太遗憾了?
呜呼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Top
19 楼kwer(理想生活:白天种地,晚上上网 ) (▲▲▲▲▲▲)回复于 2005-06-13 17:30:23 得分 0
如何用 quey 动态地调用 SQLSERVER 2000 的存储过程?存储过程中有输入输出参数,输出参数为整数。
请各位高手多多指教。
--
query 在 Query.Excute 后可以返回结果吗?
还是 Open ?(会报错?)Top
20 楼mqjshanghai(有了她)回复于 2005-06-14 00:13:26 得分 0
帮你顶下,大哥给我5分,我要求不高Top
21 楼appley(陈泊)回复于 2005-06-14 06:25:53 得分 0
用存储过程控件不就行了吗Top
22 楼jkx01whg(爱迪01)回复于 2005-06-14 09:55:51 得分 0
用
Query.SQL.Add('p_exporttb 过程名');
Query.Excute;
可以啊,除非你的存储过程有错Top
23 楼coffee36(咖啡)回复于 2005-06-14 10:52:33 得分 5
使用ADOSTOREDPROC就可以了。
动态创建它就行
var
p:tadostoredproc;
my_fwreateb,my_fwreates:double;
begin
p := TADOStoredProc.Create(self);
p.Connection := dmform.ADOConnection1;
p.ProcedureName := 'payfee';//存储过程名
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;//输入参数
Value := HZNo ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := MZNo ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := SPNo ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftfloat;
Direction := pdinput;
Value := strtofloat(SPCnt) ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := SPU ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftfloat;
Direction := pdinput;
Value := strtofloat(SPPe) ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := Staffno ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := JYNo ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := JYLS ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftinteger;
Direction := pdinput;
Value := 0 ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftinteger;
Direction := pdinput;
if huipino = '' then
begin
Value := 0;
end
else
begin
Value := strtoint(huipino) ;
end;
end;
with p.Parameters.AddParameter do
begin
DataType := ftinteger;
Direction := pdoutput;//输出参数
Name := 'retval' ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftfloat;
Direction := pdoutput;
Name := 'fwrateb' ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftfloat;
Direction := pdoutput;
Name := 'fwrates' ;
end;
p.ExecProc ;
ret := p.Parameters.ParamValues['retval'];//存储过程返回值
my_fwreateb:=p.p.Parameters.ParamValues['fwrateb']; //输出参数
my_fwreates:=p.p.Parameters.ParamValues['fwrates']; //输出参数
p.free;
Top
24 楼Hank(星星农场)回复于 2005-06-14 11:15:48 得分 7
本来很简单的问题非要搞的这么复杂!
通过ADOQuery.SQL.Add('exec spproc 参数一,参数二');
具体参看SQL的帮助
然后
ADOQuery.Execute;
如果有返回值也就是有输出参数,那么大不了存储过程最后一行加入
SELECT 参数1,参数2,参数3
然后通过adoquery.fieldbyname就可以调用了Top
25 楼belllab(菜鸟)回复于 2005-06-14 13:53:38 得分 48
只有输入参数的话,很简单
ADOQuery.SQL.Add('Exec MySP :参数一,:参数二');
ADOQuery.Parameters.ParamByName('参数一').Value:=AAAA;
或Query.ParamByName('参数一').AsInteger:=AAAA;
如果有输出参数的话,稍微麻烦一点
Query.SQL.Add('declare @OP1 int,@OP2 int');
Query.SQL.Add('Exec MySP :参数一,:参数二,@OP1 output,@OP2 output ');
Query.SQL.Add('select OP1=@OP1,OP2=@OP2 ');
Query.Open;
Top
26 楼zjingl(风)回复于 2005-06-14 18:12:50 得分 0
谢谢各位,让我试试看.Top




