Buenas tardes. A ver si me explico: Tengo dos tablas (Facturas Y Detfactura) en una base de datos FB; en la primera guardo los datos de cabecera de las facturas y en la segunda las líneas de detalle de cada una de ellas.
Para grabar en la primera tengo este query:
Código SQL
[-]Query->Close();
Query->SQL->Text = "INSERT INTO Factura (TipoDoc, Fecha, Cliente, ForPago) VALUES (:TipoDoc, :Fecha, :Cliente, :ForPago)";
Query->ParamByName("TipoDoc")->AsInteger = fFacturas->Tag;
Query->ParamByName("Fecha")->AsDateTime = Fecha->Tag;
Query->ParamByName("Cliente")->AsInteger = fFacturas->Tag == 1 ? 1 : StrToInt(Panel4->Tag);
Query->ParamByName("ForPago")->AsInteger = fFacturas->Tag == 2 ? 1 : (int)(TObject*)fCieFac->Fpago->Items->Objects[fCieFac->Fpago->ItemIndex];
Query->ExecSQL();
if (fMenu->Query->RowsAffected < 1)
{
cAux = "Error al grabar los datos de" + (fFacturas->Tag != 3 ?(String)"l " : (String)" la ") +
(fFacturas->Tag == 1 ? (String)"tiquet" : (fFacturas->Tag == 2 ? (String)"albarán" : (String)"factura"));
throw Exception(cAux);
}
Query->Transaction->Commit();
En la misma tabla guardo albaranes y facturas por comodidad. Una vez que he guardado estos datos hago esto con otro query antes de grabar el detalle del documento:
Código SQL
[-]Auxiliar->Close();
Auxiliar->SQL->Text = "SELECT GEN_ID(ID_" + (fFacturas->Tag == 1 ? (String)"Tiquet" : (fFacturas->Tag == 2 ? (String)"Albaran" : (String)"Factura")) +
", 0) Valor FROM RDB$DATABASE";
Auxiliar->Open();
Lo curioso es que el primer query, el de grabación, se ejecuta sin problema pero al tratar de ejecutar el segundo para sacar el número de documento que se ha generado me da un error: me dice que la transacción asociada al query no está activa. El primer query tiene asociada una transacción que he llamado
tTpv y el segundo otra distinta que he llamado
tAuxiliar y que en ningún momento desactivo ni detengo ni nada.
Llevo todo el día dándome de tortas con estas líneas de código y no sé por qué se produce ese error. En el formulario donde tengo declarada la BB.DD. y demás hay esto:

Ejecutando con el depurador, antes de ejecutar el primer query puedo ver esto:

Después del ExecSQL() queda así:

La segunda transacción, que está activa, es la que está asociada al segundo query, pero me da ese error que indico.