Habra que investigarlo, la documentacion no es del todo clara:
http://docwiki.embar...tions_(FireDAC)
Alternatively, the application can use the explicit transaction control. For this, use the TFDConnection methods StartTransaction, Commit, Rollback. An alternative to this is the use of the TFDTransaction component.
Note: The use of the TFDTransaction component is optional in FireDAC.
Ejemplo de la misma pagina en la documentacion del codigo "estandar" para manejo de transacciones:
FDConnection1.StartTransaction;
try
FDQuery1.ExecSQL;
....
FDQuery1.ExecSQL;
FDConnection1.Commit;
except
FDConnection1.Rollback;
raise;
end;
Asi lo he hecho yo siempre con todas las distintas familias de componentes, jamas tuve un problema.
Nota sobre TFDTransaction, tambien del mismo link de arriba:
The TFDTransaction component wraps the transaction control functionality into a component. Practically, it offers the same transaction functionality as TFDConnection, but allows you to group commands and datasets by linking them to a specific transaction object. At first, this refers to the multiple active transactions support, that is the Interbase and Firebird server features.
Que es justamente lo que he dicho en las primeras respuestas del hilo, el TFDTransaction es para tener multiples transacciones activas al mismo tiempo y tener un par de queries/command con el TFDTransaction #1 y otro conjunto de queries y command asociados con el TFDTransaction #2, calculo que esto servira para incrementar performance cuando varios procesos se pueden ejecutar en paralelo (porque operan en distintas tablas, con distintos datos, etc)
http://docwiki.embar...ve_Transactions
Firebird and InterBase support multiple active transactions on the DBMS core level. This means that some commands may be performed in one transaction context, others in the second transaction context, and so on. To support this feature, FireDAC provides the TFDTransaction component. Its single instance allows you to handle single transactions at any given moment
No todas las BD soportan esto y por eso la doc. aclara que, en un principio, solo tiene sentido en Firebird e Interbase
---
Por otra parte:
http://docwiki.embar...tartTransaction
The StartTransaction call is the shortcut to Transaction.StartTransaction, if the Transaction property is assigned. Otherwise StartTransaction will operate on the default connection transaction.
En definitiva, FDConnection.StartTransaction == FDConnection.Transaction.StartTransaction. Probablemente el componente FDConnection cree la instancia del Transaction si esta es nil cuando llamamos a StartTransaction