Subject Re: IB_Query.InvalidateSQL and Refresh
Author
It's the call to SysOpen which appears to be the spinner.
There is re-entry occurring when you call IB_Query.Refresh after you InvalidateSQL.

if FOpenCurLevel = 0 then
    FOpenMaxLevel := 0
  else
  // I need to disallow reentry into this method for now.
    Exit;
  Inc( FOpenCurLevel );
  Inc( FOpenMaxLevel );


If you use IB_Query.Transaction.Refresh(True), the re-entry is triggered and exit occurs
Alan