Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delphi TDBXTransaction 'Invalid transaction Object'

1st off I am new to Delphi so this may be a "mundane detail" that's being over looked. [sorry in advance]

I am getting an 'Invalid Transaction Object' error when I attempt to run a transaction through a datasnap server connected to an Oracle 11g DB.

Due to the system details and the companies business plan we have elected not to use ClientDataSets to handle our transactions. Instead we are attempting to make the Snap server very generic and only handle data access by receiving queries and returning native types.

With that being said here is some sample code that is giving me fits:

function TSnapMethods.TransUpdate: boolean;
var
  dbx: TDBXTransaction;
  params:TParams;
begin
  SqlCon.Open;
  dbx := SQLCon.DBXConnection.BeginTransaction(TDBXIsolations.ReadCommitted);
  try
      params:= TParams.Create(self);
      with Params.AddParameter do
      begin
        name:= 'param';
        DataType:= ftWideString;
        ParamType:= ptInput;
        asString:= 'Bugsville';
      end;
      with Params.AddParameter do
      begin
        name:= 'var';
        DataType:= ftWideString;
        ParamType:= ptInput;
        asString:= 'ZZZTOP';
      end;
      sqlcon.Execute('Update Name set City=:param Where Abrv=:var',params);

      SQLcon.CommitFreeAndNil(dbx);//Breaks here...
      result:= true;
  except
    Sqlcon.RollbackFreeAndNil(dbx);//Breaks here also...
    result:= false;
  end;        
end;
like image 667
Troy Harris Avatar asked Dec 04 '25 19:12

Troy Harris


1 Answers

By calling SQLCon.DBXConnection.BeginTransaction(), you're bypassing the setting up of internal TTransactionItem which is checked when the transaction is committed when you call SQLcon.CommitFreeAndNil() on the SQLConnection object. Notice that you're starting the transaction on the DBXConnection object but not committing it likewise.

Replace

SQLCon.DBXConnection.BeginTransaction()

with

SQLCon.BeginTransaction()
like image 195
Sertac Akyuz Avatar answered Dec 07 '25 17:12

Sertac Akyuz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!