Hola duilioisola, gracias por tu atención, pero creo que no has entendido bien mi consulta, el último bloque de código, al que te refieres, es una simple prueba que hice para ver que pasaba si hacía la inserción en una transacción distinta.
Lo que hago en AbrirTablas es simplemente eso, reabrir los DataSet necesarios tras la finalización de una transacción. Y lo que hago en el último fragmento de código es lo siguiente.
Código:
{Abro las transacciones}
T.StarTransaction //DmDatos.IBTrFac ya está abierta
{Inserto los valores}
T.InsertarCampos //El select lo tengo realizado con anterioridad
{Finalizo transacciones}
T.Commit
dmDatos.IBTrFac.Rollback //No se realizó ningun cambio en esta transacción, hago Rollback para finalizarla, daría lo mismo hacer commit;
{Reabro los DataSet para ver los últimos registros insertados}
AbrirTablas
Pero repito, esto es sólo una prueba que realice con posterioridad, el problema con IBX está que si se borraron los datos de la tabla desde una transacción externa antes de insertar un registro tengo que terminar la transacción activa e iniciar una nueva, ya que sino me inserta un registro con id = ultimo id del data set + 1. Lo que me llama la atención es que la clave se calcula en un procedimiento almacenado en la base de datos.
¿Puede tener algo que ver con las propiedades de la transacción y que esté leyendo algo que fué modificado con anterioridad?, pero en caso hacer un insert desde otro lado, ahí si me actualiza bien la clave.
Lo tengo solucionado finalizando y volviendo a inciar la transacción antes del insert, pero lo que me extraña es que con insert si funciona bien, por lo que me gustaría saber a que era debido este comportamiento.
Un saúdo y gracias por la ayuda.