Making the helper class for TODBCConnection is okay, but it gives you not much more than "syntax sugar" -- it cannot do much more than a separate function which takes TODBCConnection as a parameter.
Anyway, here is my thinking about the blocking problem, absolutely not tested. Of course, all that assuming that this SQLCancel was somehow implemented, with a helper class or not.
I believe that blocking problem can be solved by starting the query in separate thread, let's call it thread2, and from separate transaction created inside this thread. I don't know if a separate connection component is needed, I don't think so, but perhaps it is.
The main thread should take care of the time passed since thread2 starts.
When the query successfully finishes, thread2 should notify the main thread in synchronized procedure and then safely terminate.
After some time passed since thread2 was started and if no notification about successful finish came from thread2, then the main thread can call cancel from its own transaction.