小弟在sql server 2000下写了一个存储过程如下 :
CREATE PROCEDURE geta1
@firsttime datetime ,--存款日期
@fcorpus money,--本金
@along int, -- 存款时间
@accrual float output --利息
as
………………然后用delphi 6 中ADOStoredProc1 调用如下:
ADOStoredProc1 .parameters.ParamByName('@firsttime').Value:=2000-1-1;
ADOStoredProc1 .parameters.ParamByName('@fcorpus').Value:=100;
ADOStoredProc1 .parameters.ParamByName('@along').Value:=30;
ADOStoredProc1. Parameters.CreateParameter('@accrual', ftFloat, pdOutput, 10, 0);// 出错! 如果不加这句可以执行,但没有返回结果
ADOStoredProc1.ExecProc;
Label1.Caption :=ADOStoredProc1.Parameters.ParamByName('@accrual').Value;我是着用adoquery 调用也能通过:
close;
sql.Clear ;
SQL.Add( 'declare @a1 money exec geta1 ''2001-1-1'',100,30,@a1 output ');
open;但最终目的是要用返回值的阿!!
是不是调用方法不对啊。刚学着调用又返回值的存储过程,望大虾不惜赐教!
CREATE PROCEDURE geta1
@firsttime datetime ,--存款日期
@fcorpus money,--本金
@along int, -- 存款时间
@accrual float output --利息
as
………………然后用delphi 6 中ADOStoredProc1 调用如下:
ADOStoredProc1 .parameters.ParamByName('@firsttime').Value:=2000-1-1;
ADOStoredProc1 .parameters.ParamByName('@fcorpus').Value:=100;
ADOStoredProc1 .parameters.ParamByName('@along').Value:=30;
ADOStoredProc1. Parameters.CreateParameter('@accrual', ftFloat, pdOutput, 10, 0);// 出错! 如果不加这句可以执行,但没有返回结果
ADOStoredProc1.ExecProc;
Label1.Caption :=ADOStoredProc1.Parameters.ParamByName('@accrual').Value;我是着用adoquery 调用也能通过:
close;
sql.Clear ;
SQL.Add( 'declare @a1 money exec geta1 ''2001-1-1'',100,30,@a1 output ');
open;但最终目的是要用返回值的阿!!
是不是调用方法不对啊。刚学着调用又返回值的存储过程,望大虾不惜赐教!
解决方案 »
- 散分,以示感恩!第三帖
- 找不到wsdl import的选项。
- filter order by问题
- 在做数据库异地还原时碰到的问题,有点难度分不够可以再加,高手进来帮忙,谢谢!!!!
- IdTCPServer 控件为什么在程序时ACTIVE:=FALSE;出错.
- Delphi程序员进来看看,也许是你需要的
- 如何移动鼠标到指定的点
- 日期问题
- 数据模块的问题,高手请进!
- help me:http://www.csdn.net/expert/topic/373/373660.shtm
- 如何在delphi中实现对文件进行base64编码
- 用D5,如何在交叉连接的两台win98机器,MS SQL SERVER之间传数据?30分
ADOStoredProc1. Parameters.CreateParameter('@accrual', ftFloat, pdOutput, 10, 0);// 改为ADOStoredProc1 .parameters.ParamByName('@accrual'....
ExecProc后就可以了
Label1.Caption :=FloatToStr(ADOStoredProc1.Parameters.ParamByName('@accrual').Value);
要不就是你的存储过程有问题
@accrual--是output 型的,在adostoredproc1执行前需要给他赋值吗?
to firetoucher(风焱) :
我直接调用这句时系统提示类型转换错误,
Label1.Caption :=FloatToStr(ADOStoredProc1.Parameters.ParamByName('@accrual').Value);
我申明了 一 double型的变量,向赋值给他也是这个错!真是类型转换的问题吗?
但是,带同样的参数在sql sever 的查询分析器中却有数据 。是调用问题吗?
ADOStoredProc1 .parameters.ParamByName('@firsttime').Value:=2000-1-1;
ADOStoredProc1 .parameters.ParamByName('@fcorpus').Value:=100;
ADOStoredProc1 .parameters.ParamByName('@along').Value:=30;
ADOStoredProc1 .parameters.ParamByName('@accrual').value:=0;
ADOStoredProc1.ExecProc;
Label1.Caption :=ADOStoredProc1.Parameters.ParamByName('@accrual').asstring;
ADOStoredProc1 .parameters['fcorpus'].Value:=100;
ADOStoredProc1 .parameters['along'].Value:=30;
ADOStoredProc1 .parameters['accrual'].Direction := pdOutput;
ADOStoredProc1 .parameters['accrual'].DataType := ftFloat;
ADOStoredProc1.ExecProc;Label1.Caption :=ADOStoredProc1.Parameters.ParamByName('@accrual').asstring;