小弟在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;但最终目的是要用返回值的阿!!
是不是调用方法不对啊。刚学着调用又返回值的存储过程,望大虾不惜赐教!

解决方案 »

  1.   

    ADOStoredProc1 .parameters.refresh;
    ADOStoredProc1. Parameters.CreateParameter('@accrual', ftFloat, pdOutput, 10, 0);// 改为ADOStoredProc1 .parameters.ParamByName('@accrual'....
      

  2.   

    如果你是静态生成的ADOStoredProc1,不用createparam,
    ExecProc后就可以了
    Label1.Caption :=FloatToStr(ADOStoredProc1.Parameters.ParamByName('@accrual').Value);
    要不就是你的存储过程有问题
      

  3.   

    to blueshu(绝对是菜鸟) :
    @accrual--是output 型的,在adostoredproc1执行前需要给他赋值吗?
    to firetoucher(风焱) :
    我直接调用这句时系统提示类型转换错误,
    Label1.Caption :=FloatToStr(ADOStoredProc1.Parameters.ParamByName('@accrual').Value);
    我申明了 一 double型的变量,向赋值给他也是这个错!真是类型转换的问题吗?
      

  4.   

    判断一下是否@accrual返回值为空值
      

  5.   

    to firetoucher(风焱) :ParamByName('@accrual').Value =nill
    但是,带同样的参数在sql sever 的查询分析器中却有数据 。是调用问题吗?
      

  6.   

    ADOStoredProc1 .parameters.refresh;
    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;
      

  7.   

    ADOStoredProc1 .parameters['firsttime'].Value:='2000-1-1';
    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;