1、中间层的Remote Data Module和Transactional Data Module的有什么不同?2、现在我用的是Transactional Data Module方式,在中间层写了一个专门执行SQL Server的接口,想法是客户端的所有数据操作都通过该接口提交数据。过程如下:
function TTranCom.ASPExec(const ASPName, ProName: WideString; ArrPara,
  ArrValue: OleVariant; out RetOut: WideString): OleVariant;
Var
  i:Integer;
  AspExec : TADOStoredProc;
  AspDSP : TDataSetProvider;
begin
  RetOut := '';
    AspExec := FindComponent(ASPName) as TADOStoredProc; 
     //寻找执行控件
    AspDSP := FindComponent(ASPName) as TDataSetProvider; 
     //寻找DataSteParovider
  AspExec.Connection := ASP_Exec.Connection;
    //设置连接信息
  with AspExec,Parameters do
  begin
    Close;
    ProcedureName := ProName;
    Refresh;
    for i:=0 to 99 do
    begin
      try VarToStr(ArrPara[i]);
        ParamByName(ArrPara[i]).Value := ArrValue[i];
      except
        break;
      end;
    end;
    ExecProc;
    RetOut := Parameters.ParamByName('@vc_ErrMsg').Value; //返回错误信息
    Result := AspDSP.Data;  //返回表格
  end;
end;
现在的问题是,中间层用只用一个TADOStoredProc可以不?(我的客户数很大50~100个,并发数也可能50~100个)

解决方案 »

  1.   

    Transactional Data Module是支持事务处理的Data Module.它提供了事务处理的方法,如SetComplete,SetAbort等.中间层用一个TADOStoreProc也没什么问题
      

  2.   

    一个是Com+,进程内服务com+有池功能,但不好调试。一个是进程外服务
    都个自有特点呵呵。
      

  3.   

    中间层的Remote Data Module和Transactional Data Module的有什么不同?
    前者不支持事务,
    后者支持事务,是专门用来创建COM+组件的。
    可以查看帮助的setcomplet和setabort就是Transactional Data Module的事务语句。
      

  4.   

    给你一个提示,用好setcomplet和setabort
      

  5.   

    老是说我在用tdm的时候并不喜欢使用setcomplet和setabort,我曾经发现他并不能正常工作,我还是写not support Transaction的com+组件,最大的好处就是池子至于楼主的问题,
    r:将生成一个exe,
    t:生成dll,并在com+环境中加载,提供连接池,安全性,可分发的.
    因此建议使用com+
      

  6.   

    请问setcomplet和setabort怎么用呀?我是新手,不怎么懂呢!就我上面给的一个接口来说,setcomplet和setabort该加在什么地方呢?
      

  7.   

    大家看看,我这样写可以不?
    function TTranCom.ASPExec(const ASPName, ProName: WideString; ArrPara,
      ArrValue: OleVariant; out RetOut: WideString): OleVariant;
    Var
      i:Integer;
      AspExec : TADOStoredProc;
      AspDSP : TDataSetProvider;
    begin
    try
      RetOut := '';
        AspExec := FindComponent(ASPName) as TADOStoredProc; 
         //寻找执行控件
        AspDSP := FindComponent(ASPName) as TDataSetProvider; 
         //寻找DataSteParovider
      AspExec.Connection := ASP_Exec.Connection;
        //设置连接信息
      with AspExec,Parameters do
      begin
        Close;
        ProcedureName := ProName;
        Refresh;
        for i:=0 to 99 do
        begin
          try VarToStr(ArrPara[i]);
            ParamByName(ArrPara[i]).Value := ArrValue[i];
          except
            break;
          end;
        end;
        ExecProc;
        RetOut := Parameters.ParamByName('@vc_ErrMsg').Value; //返回错误信息
        Result := AspDSP.Data;  //返回表格
      end;
      setcomplet
    except
      Set RetOut := '中间层出现错误!'
      setabort
    end;
    end;