我想在客户端动态调用存储过程
在中间层定义了个方法SetProcName(sProcName);
可能传存储过程的名称过去
再在客户端用ClientDataSet.Execute;执行存储过程
可得不到存储过程执行的返回结果 result我在客户端创建reult参数如下:
  with cdsProc do
  begin
    Close;
    strSQl := Trim(memProc.Lines.Text);
    frmMain.SockConn.AppServer.SetProcName(strSQL);
    Params.Clear;
    Params.CreateParam( ftString, '@vc_user', ptInput );
    Params.CreateParam( ftString, '@vc_login_ip', ptInput );
    Params.CreateParam( ftString, '@c_auto_ip', ptInput );
    Params.CreateParam( ftInteger, '@i_login_time', ptInput );
    Params.CreateParam( ftString, '@vc_host_name', ptInput );
    Params.CreateParam( ftString, '@vc_message', ptOutput );
    Params.CreateParam( ftInteger, 'result', ptResult);    Params.ParamByName('@vc_user').AsString := 'Tyson';
    Params.ParamByName('@vc_login_ip').AsString := '127.0.0.0';
    Params.ParamByName('@c_auto_ip').AsString := '1';
    Params.ParamByName('@i_login_time').AsInteger := 1429;
    Params.ParamByName('@vc_host_name').AsString := 'wjg';
    Params.ParamByName('@vc_message').AsString := '';    Execute;
    sm := Params.ParamByName('@vc_message').AsString;
    iErrMsg := Params.ParamByName('result').AsInteger;问题是sm的值都可以得到,可到了最后一句就报错: 'Parameter: 'result' not fount不知什么原因??

解决方案 »

  1.   

    SQL server2000上的存储过程是这样的:
    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO
    ALTER   procedure sp_ztset_userlogins
      @vc_user VCUserid,
      @vc_login_ip varchar( 16 ),
      @c_auto_ip CKind,
      @i_login_time ITime,
      @vc_host_name varchar( 20 ),
      @vc_message varchar( 36 ) output
    as
      declare @vc_address varchar( 12 )
      set @vc_message='OK'
      select distinct @vc_address = net_address  from master..sysprocesses
         where hostprocess = host_id() and hostname = host_name()  delete from runbase..userlogins where vc_user = @vc_user and
         vc_login_ip = @vc_login_ip  insert runbase..userlogins( vc_user,vc_login_ip,c_auto_ip,i_login_time,
         vc_host_name,vc_address ) values(
          @vc_user,@vc_login_ip,@c_auto_ip,@i_login_time,@vc_host_name,@vc_address )  if ( ( @@error <> 0 ) or ( @@rowcount = 0 ) )
      begin
        select @vc_message = 'runbase..userlogins'
        return 11
      end
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
    我的ClientDataSet是连到一个DataSetProvider上,而这个DataSetProvider连接到一个AdoStoreProc上的,我怀疑可能是ADOStoreProc不支持返回值功能?
      

  2.   

    iErrMsg := Params.ParamByName('@RETURN_VALUE').AsInteger;