用delphi写了一个需要事务的com+,当中间层和服务器不在同一台机器上,提示:
错误"新事务不能登记到指定的事务处理器"???但是当中间层和服务器在同一台机器上就不会出现该问题
请问各位大侠,这是什么错误呀?
谢谢了!
这个问题捆饶我好几天了,查了n多资料都不没能找到解决的办法!!

解决方案 »

  1.   

    在“运行”中输入“dcomcnfg”里面要选择与你有关的应用程序设置安全性的“无”和身份标识为“交互式用户”
      

  2.   

    bee2518(迷茫ing,说的对,我也遇到过.
      

  3.   

    我已经按"bee2518(迷茫ing)"设置了,但还是不行
    我把代码贴上来,让大家看看是不是我的代码有问题!谢谢
      

  4.   

    MIDAS注册后,再把客户端的登陆用户/密码和服务器一致试试
    如果还不行,我也没招了
    GOOD LUCK
      

  5.   

    Server:
    unit DMUnit;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComServ, ComObj, VCLCom, StdVcl, bdemts, DataBkr, DBClient,
      MtsRdm, Mtx, TranData_TLB, DB, ADODB;type
      TTTranData = class(TMtsDataModule, ITTranData)
        AC: TADOConnection;
        ADO: TADOQuery;
        procedure MtsDataModuleActivate(Sender: TObject);
        procedure MtsDataModuleDeactivate(Sender: TObject);
      private
        { Private declarations }
      protected
        class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
        function Test: WideString; safecall;
      public
        { Public declarations }
      end;var
      TTranData: TTTranData;implementationuses Variants;{$R *.DFM}class procedure TTTranData.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
    begin
      if Register then
      begin
        inherited UpdateRegistry(Register, ClassID, ProgID);
        EnableSocketTransport(ClassID);
        EnableWebTransport(ClassID);
      end else
      begin
        DisableSocketTransport(ClassID);
        DisableWebTransport(ClassID);
        inherited UpdateRegistry(Register, ClassID, ProgID);
      end;
    end;procedure TTTranData.MtsDataModuleActivate(Sender: TObject);
    begin
    try
      AC.ConnectionString := 'Provider=SQLOLEDB.1;Password=PS;Persist Security Info=True;User ID=sa;Initial Catalog=master;Data Source=ServerIP';
      AC.Connected := True;
    except
      ON E: Exception do
        raise ERangeError.Create('ACActive'+E.Message);
    end;
    end;
    procedure TTTranData.MtsDataModuleDeactivate(Sender: TObject);
    begin
      try
        AC.Connected := False;
      except
        ON E: Exception do
          raise ERangeError.Create('ACDeactivate'+E.Message);
      end;
    end;
    function TTTranData.Test: WideString;
    begin
      with ADO do
      begin
        SQL.Clear;
        SQL.Text := 'Select top 1 name FROM dbo.syscolumns';
        try
          open;
          Result := FieldByName('name').AsString;
          SetComplete;
        except
          ON E: Exception do
          begin
            SetAbort;
            raise ERangeError.Create('ADOOpen'+E.Message);
          end;
        end;
      end;
    end;initialization
      TComponentFactory.Create(ComServer, TTTranData,
        Class_TTranData, ciMultiInstance, tmBoth);
    end.------------------------------
    Client:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(OPSData.Test);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      try
        OPSData := CoTTranData.CreateRemote('中间层IP');
      except
        ON E: Exception do
          raise ERangeError.Create('client'+E.Message);
      end;
    end;错误提示:
    ACActive新事务不能登记到指定的事务处理器中。希望大家能帮我看看,究竟是什么原因,再次谢谢了!
      

  6.   

    看代码我最晕了
    你可以参考《Delphi深度编程及其项目应用开发》里面有例子
      

  7.   

    请问那里有《Delphi深度编程及其项目应用开发》的电子书籍下载呀?
    我这里买书不方便的,谢谢!
      

  8.   

    http://community.csdn.net/Expert/topic/3593/3593206.xml?temp=.2159845
    这个帖子跟你有点相似
    你去看看,我在里面也回答了
      

  9.   

    bee2518(迷茫ing) 谢谢你,按上面的方法我都设置了,还是不行呢。现在的问题的焦点主要是在当我的中间层和服务器在同一台机器上的时候没有任何问题!当中间层服务器和数据服务器不在同一台机器上的话,就会出现“新事务不能登记到指定的事务处理器中”的错误!狂郁闷!我的测试环境是这样的:我自己的机器上安装有sql server,同事的机器上也安装sql server。 而且我们都在一个没有域的同一个工作组中。当数据库用我自己的sql server的时候没有任何问题(相当于客户端、中间层、sql server在同一台机器),但是当我用同事的sql server的时候就出现我上面说的问题(相当于客户端、中间层在同一机器上,sql server 在另一台机器上)。这问题困惑我好久了,一直都没能解决,请大家再帮帮忙吧,谢谢了!