alogrep 0 Posted September 1 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
eivindbakkestuen 47 Posted September 3 On 9/2/2024 at 4:20 AM, alogrep said: OnPostError Notice the "Post" part? I'm guessing the error doesn't occur in .Post, but in .Edit. Share this post Link to post
Remy Lebeau 1436 Posted September 3 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