No se si puede servirte, pero esta semana me he entrado que firebird(y otros SGBD) tienen la posibilidad que un insert te devuelva datos...
Seria algo asi como un insert/select.
Lo acabo de probar con firebird 2.1 i firedac y me ha funcionado sin problemas.
Siguiendo tu ejemplo la sentencia seria...
Código Delphi
[-]
Q1.SQLText:='Insert into TableX values (:P1, :P2, :P3) returning nombre_campo';
La única cosa a tener en cuenta es que debes abrir la consulta con Open en lugar de ejecutarla con ExecSQL
Saludos todos