以下是我写的简单的存储过程
CREATE PROCEDURE [dbo].[Htest] 
@FInt int,@FR varchar(50) output
AS
if @Fint=0 
  set @FR='K0'
else
  set @FR='K1'
Return @FR
GO
在delphi中调用如下
with ADOStoredProc1 do
 begin
    close;
    ProcedureName:='HTest'
    Parameters.Refresh;
    Parameters.ParamByName('@Fint').Value:=0;//参数
    Parameters.ParamByName('@FR').Value := 0;
    Prepared;
    ExecProc;
    NUM:=Parameters.ParamByName('@FR').Value;//返回值
 end;
showmessage(NUM);
错误提示:K1转化为数据类型int是错误;
如果把存储过程改为如下则在delphi中调用正常
CREATE PROCEDURE [dbo].[Htest] 
@FInt int,@FR varchar(50) output
AS
if @Fint=0 
  set @FR='0'
else
  set @FR='1'
Return @FR
GO疑问:
  1.我在存储过程中定义了返回值是varchar(50),怎么会是转化为int呢?
    难道存储过程的返回值只能是int型的?
  2。请教改如何解决?谢谢

解决方案 »

  1.   

    分太少了。
    问题不难,你可能对存储过程的参数使用不太了解。
    你问的问题一不成立,那是因为你的存储过程写错了。
    问题二:首先ProcedureName:='HTest'这句少一个“;"
            其次存储中Return @FR这句改为Return就行了
    如果你不明白可以问我:[email protected]
      

  2.   

    存储过程没错,调用错了
    with ADOStoredProc1 do
     begin
        close;
        ProcedureName:='HTest'
        Parameters.Refresh;
        Parameters.ParamByName('@Fint').Value:=0;//参数
        Prepared;
        ExecProc;
        NUM:=Parameters.ParamByName('@FR').Value;//返回值
     end;
    showmessage(NUM);
      

  3.   

    with ADOStoredProc1 do
     begin
        close;
        ProcedureName:='HTest'
        Parameters.Refresh;
        Parameters.ParamByName('@Fint').Value:=0;//参数
        Parameters.ParamByName('@FR').Value := 0;///无须这样做, Parameters.ParamByName('@FR').Value := ‘’;
        Prepared;
        ExecProc;
        NUM:=Parameters.ParamByName('@FR').Value;//返回值
     end;
    showmessage(NUM);