Jump to content
alogrep

Datafaction = DaAbort still shows the error message?

Recommended Posts

HI.
I have this scheme (pseudocode)
rery+0
repeat
  starttransaction;
  try
    table1.edit;.
    change table1;
    table1 post;
    commit;
  except
    on E: SysUtils.Exception  do begin
       Rollback;
       table1 cancel
       inc(retry);
      if retry>=3 then 
         showmessage & exit
      else
         sleep(500);
    end;
   end;
until retry>=3;
end;
In table1 OnPostError I have
begin
   ACTION:=DAaBORT;
end;
Why do I get the error message (regarding a conflict with other users)?
That defeats the purpose of the start transaction/commit/rollback setup.
DaAbort should NOT show the message, correct?
My intent is to retry the edit/post operation 3 times, but if a message shows up with
one user, by the time it reads it and closes it, other concurrent users get a timeout error.
 

Share this post


Link to post

Your rollback and cancel calls are backwards.  Since the transaction was started first, it should be rolled back last.  Cancel the edit before you rollback.  Consider using a 2nd try..except block to handle this correctly.  You are also not breaking the loop if the transaction is successful.

 

Try this instead:

retry := 0;
repeat
  starttransaction;
  try
    table1.edit;
    try
      change table1;
      table1.post;
    except
      table1.cancel;
      re-raise;
    end;
    commit;
    Break;
  except
    Rollback;
    inc(retry);
    if retry >= 3 then 
      showmessage & exit
    else
      sleep(500);
  end;
until False;

 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×