我在应用服务器端调用一个存储过程,该存储过程有几个参数。问怎样才能把存储过程的参数从客户端传给存储过程?

解决方案 »

  1.   

    var
      strSuccess:string;
    begin
      strSuccess:='';
      with spProfCal do
      begin
        ParamByName('xCOMPID').AsString:=xCOMPID;
        ParamByName('CURDATE').AsString:=DateToString(xCURDAT);
        ExecProc;
        //注意SUCCESS是传出参数,赋值是在存储过程内部进行的。
        strSuccess:=ParamByName('SUCCESS').AsString;
        if trim(strSuccess) = 'Y' then
           Result:=True
        else
           Result:=False;
      end;
    end;
      

  2.   


     dm.ReportQuery.Params.ParamByName('id').Value :=tra_id;
        dm.ReportQuery.Open;
        dm.RptQuery.Params.ParamByName('id').Value :=tra_id;
    dm.RptQuery.Open;
    ReportQuery是ReportQuery
      

  3.   

    1 存储过程的调用,如果由应用服务器来完成的话,可以采用如下的方式:在server端定义一个接口方法,然后在这个方法中调用存储过程,客户端在调用该方法时,将参数通过接口方法的参数传递给存储过程。
    2 可以在客户端直接调用存储过程。clientdataset + datasetprovider + adoquery + adoconnection 采用这种方式的话,可以如下调用:
      clientdataset1.Close();
      clientdataset1.CommandText:=strSql;
      clientdataset1.Execute();
      如果后台数据库为oracle,strSql:="call temp.main(参数1,参数2,..参数n)";
      如果后台数据库为SqlServer,strSql:="temp 参数1,参数2,...参数)";
    当然,要将datasetprovider 设置为允许客户端执行sql.
      

  4.   

    在服务器端定义一个方法:
      OpenStoreProcedure(WorkMode:Integer,ComponentString :WideString,OleVariant &ReturnData,long &ExitCode);
    参数说明:
      1.WorkMode  是否存在返回数据集
      2.ComponentString  控件字符流
      3.ReturnData     返回的数据集
      4.ExideCode      返回的状态标志1.在客户端将你的数据库操作控件设置好参数后,将该控件转化为 WideString ,传到服务器端;
    2.在服务器端将客户端传过来的 ComponentString 还原成数据库操作控件,在服务器端执行它。
    如果是存在返回数据集的操作的话,就只需要加个参数返回数据集在客户端进行接收;
    建议你看看delphi里的例子  WriteComponent 或 ReadComponent ;
      

  5.   

    在服务器定义方法,在客户用appsrv方法!