I ocasionally get this error when updating records in one location where the database is the largest. I gather this could be due to using Logout in transaction frame with TopSpeed database driver.
Looking at Abfile.clw I can see that the deafult value is 2 seconds which sometimes may not be sufficient. I’ve seen a note somewhere that for busier networks LogoutTimeout should be set to more than 2 seconds.
TransactionManager.Construct PROCEDURE()
CODE
SELF.Files &= NEW(TransactionManagerQueue)
SELF.RMList&= NEW(FilesOnTransactionQueue)
SELF.UselogoutList &= NEW(FilesOnTransactionQueue)
SELF.LogoutTimeout = 2
SELF.LogoutOff = False
SELF.AutoLogoutOff = True
[...]
RelationManager.Init PROCEDURE(FileManager F,BYTE Log)
CODE
SELF.Me &= F
SELF.Relations &= NEW RelationQueue
SELF.UseLogout = Log
SELF.LogoutTimeout = 2
FilesManager.AddFileMapping(SELF)
TransactionManager.SetTimeout PROCEDURE(BYTE pTimeout)
CODE
SELF.LogoutTimeout = pTimeout
I derfined my own global variables GLO:LogoutTimeout & GLO:UseLogout and am adding lines of code before and after PARENT.Init in my data dll
Hide:Relate:PaNag.Init PROCEDURE(FileManager FM,BYTE UseLogout=0)
CODE
UseLogout = GLO:UseLogout
PARENT.Init(FM,UseLogout)
PARENT.LogoutTimeout = GLO:LogoutTimeout
but doing it this way I have to add it there for all my tables. Is there a better place to put this code so that is affects all tables? I don’t want to change that in Abfile.clw, I’d rather have a setting in the ini file so that end users can choose.
On a separate note, does it at all make sense to UseLogout with TPS driver? I’m aware that it does lock the whole table during transaction, but it was not so much of a problem and I prefer to use transactions to prevent data corruption. Do you use this feature with TPS ?