只需要一个简单的例子,在一个事务中控制两个数据库连接的处理
环境:WIN2000, ORACLE8.1.7.4(已打补丁),DELPHI7
紧急求助,谢谢

解决方案 »

  1.   

    我已经控制了组件对象的事务属性:均为需要事务,现在是针对同一个连接,但是两次调用,这个都搞不定的话就别说两个连接了。单个处理没有任何问题,但出现某条记录KEY重复时并没有象想象中的那样自动回滚,而是一个提交,另一个不提交。DM中的数据库没有自动提交属性。两个对象的源码如下:
    控制对象:
    procedure TCtrlTwoDBObj.insertDept(const code, name, database: WideString;
      out poErrStr: WideString);
    var
      firstObj : IinsertToFeng;
    begin
      try
        OleCheck(ObjectContext.CreateInstance(CLASS_insertToFeng, IID_IinsertToFeng, firstObj));
        firstObj.insertDept('0001', 'feng', '', poErrStr);
        if poErrStr <> '' then
        begin
          SetAbort;
          exit;
        end;
        firstObj.insertDept('0002', 'feng', '', poErrStr);
        if poErrStr <> '' then
        begin
          SetAbort;
          exit;
        end;
        SetComplete;
      except
        SetAbort;
      end;
    end;功能对象:
    procedure TinsertToFeng.insertDept(const code, name, database1: WideString;
      out poErrStr: WideString);
    var
      sqlStr : String;
    begin
      sqlStr := Format('insert into dept values( ''%s'', ''%s'' , ''aaa'') ', [code, name]);
      dmFirst := TdmFirst.Create(nil);
      try
        try
          dmFirst.Query1.SQL.Clear;
          dmFirst.Query1.SQL.Add(sqlStr);
          dmFirst.Query1.ExecSQL;
          dmFirst.Query1.Close;
        except
          on e : Exception do
          begin
            poErrStr := e.Message + ' : ' + sqlStr;
            SetAbort;
          end;
        end;    SetComplete;
      finally
        freeAndNil(dmFirst);
      end;
    end;