FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Commit no se ejecuta
Antes que nada advertir que he estado buscando por el foro pero el único caso que he visto similar al mio es usan componentes FireDAC que yo no uso.
En una aplicación con BCB6 estoy migrando una base de datos Access a otra Firebird. En principio no me está dando demasiados problemas pero al cargar una de las tablas con definiciones FOREIGN KEY sobre otras de la BB.DD. me están surgiendo problemas. Tengo este código apra insertar registros en una tabla FB: Código PHP:
Código PHP:
|
#2
|
||||
|
||||
Bueno, no pones el código completo de esa parte y no podemos saber dónde inicias la transacción y demás. Se supone que en la consulta no estarás obteniendo los datos de otra transacción que, obviamente, no ve a la anterior.
|
#3
|
||||
|
||||
¡Uf! ¿Todo el código? Luego no quiero protestas
Código PHP:
Es la primera vez que me tengo que enfrentar a un BB.DD. Acces, que encima ni he diseñado yo ni tengo documentación alguna sobre su estructura. Los querys sobre Access (qGesElec1 y qGesElec2) los estoy montando así porque si tarto de hacerlo con parámetros no sé como se hace; pensaba que era como en el caso de los TIBQuery. El bucle ese for (nItem = 1; nItem < 8; nItem ++) es porque en dos tablas Access todos los registros están definidos como Ele_Part1, Ele_Part62, etc. y Vot_P1, Vot_P2, etc. Encuentro absurdo crear registros sin información sin razón alguna y los estoy cambiando de forma. Última edición por Angel.Matilla fecha: 23-05-2018 a las 10:37:20. Razón: Faltan comentarios |
#4
|
||||
|
||||
Me refería a todo el código implicado en la transacción
Ahí veo que haces commit, pero ¿cuándo inicias la transacción en esos casos? ¿Cómo tienes definido el TIBTransaction? |
#5
|
||||
|
||||
Vale, te había entendido mal. Lo cierto es que, y me acabo de dar cuenta al leer este mensaje tuyo, que la transacción la tengo definida en el formulario principal... ¡pero luego no hago nada con ella! Quiero decir: ni la abro, ni la verifico, ni nada de nada, ¡y sin embargo funciona bien! Los registros se graban, se actualizan, se borran. No lo entiendo.
En la transacción asociada al query que hace el INSERT sólo tengo puesto: Cita:
|
#6
|
||||
|
||||
Cita:
Código PHP:
|
#7
|
||||
|
||||
Elimina esos commit que haces después de los execsql
Al componente TIBTransaction dale estos valores: Código:
write nowait rec_version read_committed Y por supuesto, no olvides hacer un commit (no un commitretaining) por ejemplo cuando vuelves a la pantalla principal. Ya depende de cómo tengas estructurado tu programa. |
#8
|
||||
|
||||
¿Dónde pongo esos valores? ¿En los parámetros? ¿Cómo? Porque en la ayuda no lo he visto. El resto del código que me sugieres no se me había ocurrido, la verdad.
|
#9
|
||||
|
||||
Por ejemplo, doble click en el componente.
O botón derecho sobre el mismo -> editar parámetros de transacciones. |
#10
|
||||
|
||||
Imagino que te refieres a esto:
Los valores de la izquierda, ¿los dejo tal cual, sin seleccionar ninguno? |
#11
|
||||
|
||||
Ese diálogo es.
No hace falta que tú lo teclees. Si marcas "Read Commited" verás que se escriben esas opciones. |
#12
|
||||
|
||||
Gracias por todas las respuestas (me estáis enseñando un montón de cosas que desconocía) y perdón por lo paliza que llego a ser. Vamos a ver. He hecho lo que me has sugerido: darle los valores a la transacción, poner el código de la transacción (lo he puesto en el evento QueryAfterPost, como en tu ejemplo, pero tal vez no sea el mejor sitio) y he eliminado los commit tras los ExecSQL... ¡Pero me sigue haciendo lo mismo! Cuando tiene que buscar el último valor que se ha grabado en el query INSERT INTO Mesas, sigue sin encontrarlo y se salta el resto del código. De hecho tengo puesto con el depurador que se pare en:
Código PHP:
Código PHP:
|
#13
|
||||
|
||||
Pero, ¿qué error sale? ¿has verificado qué valores llevan los parámetros? etc.
|
#14
|
||||
|
||||
No sale ningún error; hace lo mismo que antes: al llegar a verificar si el query a devuelto algo, como no encuentra el dato continua con el siguiente valor del bucle. Sí, los parámetros están puestos todos. Ya te digo que he puesto el código que me has sugerido donde he indicado (en el AfterPost) pero ni siquiera llega a entrar en el evento.
|
#15
|
||||
|
||||
Tras el insert, ¿se guardó el registro?
Al hacer después el select, ¿has comprobado el query con ibexpert, o el programa que uses, para ver si es correcto? |
#16
|
||||
|
||||
Sí. Yo uso SQL Manager, pero es lo mismo; después del insert sí puedo hacer la consulta con SQL Manager.
|
#17
|
||||
|
||||
Por lo tanto el problema está en el código donde se hace el select, ¿lo has seguido paso a paso con el depurador?
|
#18
|
||||
|
||||
Sí, y se ejecuta perfectamente y sin errores. De hecho he comprobado con el propio SQL Manager que hace bien el INSERT.
|
#19
|
||||
|
||||
Cita:
No, si digo en el select, que es el que no hace: |
#20
|
||||
|
||||
¡Ah! El select tampoco da ningún error; simplemente no devuelver nada. Y como en el insert está probado con el SQL Manager y ahí sí devuelve resultado.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Commit no se ejecuta hasta que cierro la aplicación... | MAXIUM | Firebird e Interbase | 3 | 24-02-2018 15:44:20 |
con breakpoint ejecuta y sin el no lo ejecuta. | pacuuy | Varios | 1 | 16-12-2007 13:41:43 |
Commit - CommitRetaining | Luzma | Firebird e Interbase | 3 | 27-06-2006 01:58:58 |
Commit | micayael | PHP | 4 | 21-09-2005 19:34:50 |
Commit | Loviedo | Firebird e Interbase | 7 | 29-07-2005 14:36:10 |
|