The connection object can actual not detect if a connection is broken, nor can it reconnect.
Yes and no.
No, the Conn-Object can't detect a broken connection by itself automagically.
Yes, (THEORETICALLY!! Never tested it!) it could "detect" a broken connection by just firing of a "dummy"-SQL-Statement before you do anything else.
Could even be implemented as a "cycling" poll within its own thread
@Transactions: In pure Database-speak, you don't "need" a Transaction-Object, since, in a nutshell, the Transaction-Object just expands SQL-Statements with "BEGIN TRANSACTION", "COMMIT" (et al).
Pretty much all DBMS use implicit Transactions, if there is no "BEGIN TRANSACTION".
OTOH, even without a Transaction-Object you could still have them via direct SQL.
Everything said (also see Andy's and Mark's answers): It's definitely good practice to use a Transaction-Object
And no: You don't "destroy" the Transaction-Object everytime you used it.
You create it once, usually at the same time you create the connection, and you only destroy it, if you definitely don't need it anymore, usually when a Connection is explicitely closed.
@Your Function: TSQLQuery and TSQLTransaction are DBMS-Agnostic, so in layman's terms: They don't know, to which kind of DBMS you are connected. That's the job of the Connection-Object.
So if you have an abstraction-layer, the Connection-Object is actually the one you want to "pass", since TSQLQuery and TSQLTransaction actually just call the "corresponding" methods of the Connection-Object, which actually executes the lowlevel API-Calls to the Database