在应用程序服务器里用ADOConnection->ADOStoredProc->DataSetProvider
客户端该如何调用带参数(包括OutPut 的参数),
或者有什么好办法来实现调用带参数的存储过程?谢谢!

解决方案 »

  1.   

    在服务端写过程:调用存储过程客户端:直接调用服务端的过程,不要通过ClientDataSet调用
      

  2.   

    这是我写的执行存储过程的接口函数。
    在*_TLB中加的过程。
    对应具体的存储过程的参数。用TStringList存储。
    通过ParamStrings.Text:=ProcValues可以赋值给传入参数。
    procedure TDMEPServer.ExectProc(const ProcName: WideString; const ProcValues: WideString);
    Var
      I:Integer;
      ParamStrings:TStringList;
    begin
      ParamStrings:=TStringList.Create;
      try
        SpcEPPro.StoredProcName:=ProcName;
        ParamStrings.Text:=ProcValues;    For I:=0 to SpcEPPro.ParamCount-1 do
        Begin
          SpcEPPro.Params[I].Value:=ParamStrings.Strings[I];
        End;
        SpcEPPro.ExecProc;
      Finally
        ParamStrings.Free;
      End;
    end;
      

  3.   

    其中SpcEPPro是执行存储过程的数据控件。
      

  4.   

    希望能给你启发://我不明白你这是什么意思ParamStrings.Text:=ProcValues;还有,你没有创建参数就使用了参数  try
        ADOSP.Active := False;
        ADOSP.ProcedureName := 'sp_codenamedel;1';    ADOSP.Parameters.Clear; //清空参数列表
        with ADOSP.Parameters.AddParameter do //追加新参数
        begin
          Name := '@Code';
          DataType := ftString;
          Direction := pdInput;
          Size := 4;
        end;
        with ADOSP.Parameters.AddParameter do
        begin
          Name := '@TableName';
          DataType := ftString;
          Direction := pdInput;
          Size := 40;
        end;
        with ADOSP.Parameters.AddParameter do
        begin
          Name := '@State';
          DataType := ftInteger;
          Direction := pdInputOutput;
        end;
        if not ADOSP.Prepared then ADOSP.Prepared := True;    ADOSP.Parameters.ParamByName('@Code').Value := ACode;
        ADOSP.Parameters.ParamByName('@TableName').Value := TableName;
        ADOSP.ExecProc;
        Result := ADOSP.Parameters.ParamByName('@State').Value;
      except  end;参数的创建顺序与存储过程参数顺序要一致
      

  5.   


    传入参数定义成TStringList类型。MyParams用来存储过程的参数。

     MyParams.Add(ParamOne);
     MyParams.Add(ParamTwo);
      然后把MyParams对应于ProcValues传入函数。ProcValues定义为宽字符型,可以和TStringList型直接赋值。
    如同
     ParamStrings.Text:=ProcValues
     就可以直接操作ParamString来读取传入的存储过程参数了。
      

  6.   

    renzhm(戴尔飞),我觉得你的要求事先知道参数的个数。不通用。