@rvk
Sorry for the late response(I was out in the wild) and thanks for the detailed explanation. In my applications I always use IBObjects, which is in my opinion one of the best database related component. It's not free, but is worth every penny(
http://www.ibobjects.com/). The IBOTransaction's isolation level is tiCommited by default(see attached image), I wrongly assumed that is also true for a TSQLTransaction. I will quote from the IBObjects help:
tiCommitted - Read-Committed
This is the ideal isolation for a browsing user interface because it keeps up with all committed changes in the database as they occur. Thus, the interface can be refreshed to reflect changes in the database without having to start a new transaction.
If using an IB_Query component it is even possible to refresh individual rows of a dataset or, based on a refresh of the keys of the dataset, refresh the order or inclusion (in case of deletes and inserts by other users or a change in the ORDER BY criteria) of records without having to refetch the individual records of the dataset again. When this type of refresh is performed all of the row buffers are stored aside so that when their keys are fetched from the server they are reassociated with the record buffer in memory.
For years I only did a IBQuery.Refresh and everything was up to date. More over whit IBObjects you can easily subscribe to firebird events, you get notified when something changes without the need to do refresh.