Your application have to be multi-threaded, becauce the thread, that executes the query is blocked while the query is running. So you do need an other, non blocked, thread who cancels the execution of the query.
The easiest way to accomplish this, is to use a TOracleQuery instance and to set its Threaded property to True. If you subsequently execute it, it will run in a background thread. It can be cancelled by calling TOracleQuery.BreakThread.
------------------ Marco Kalter Allround Automations