![]() |
Error con las transacciones
Buenos días a todos/as,
estoy teniendo problemas con las transacciones (o eso es lo que parece en un principio) que me genera una serie de errores en el sistema. A continuación explico la situación por si estuviera haciendo alguna cosa mal y me pueden ayudar a solucionarlo (o a alguien le ha pasado lo mismo alguna vez). Utilizo Delphi 7 y tengo 3 bases de datos en Firebird y a las 3 accedo de la misma forma, con un TIBDatabase y un TIBTransaction. En el TIBTransaction tengo las propiedades "read_committed, rec_version, nowait". La cuestión es que en algunos procesos inserto registro en 2 o 3 tablas diferentes, haciendo un Transaction.CommitRetaining después de ejecutar la consulta (INSERT o UPDATE). Pues en principio todo funciona correctamente pero al tiempo de utilizar la aplicación da error al hacer cualquier operación y hay que cerrar la aplicación y volver a abrirla y funciona correctamente de nuevo. He probado a poner un Transaction.CommitRetaining y Transaction.Commit después de hacer todas las operaciones (al volver a la pantalla principal de la aplicación) pero sigo con el mismo problema. Es decir, que no se si es por las transacciones que se quedan abiertas y cuando voy a hacer otro INSERT o UPDATE me da error o es por otro motivo. Si no me he sabido explicar muy bien pero bueno. Muchas gracias de antemano y un saludo, |
Cita:
Si es Deadlock, puede que sea de transacciones. Hay más de una conexión a cada base de datos o solo tienes un ejecutable funcionando? Si haces Commit o CommitRetaining después de cada insert/update/delete, es difícil que tengas errores de transacción. (A menos que haya más de una aplicación accediendo a la base de datos) |
La aplicación se ejecuta en varios ordenadores a la vez. Y el error que da no se el porque, las consultas las tengo en un try y en el except muestro un formulario que he hecho yo para mostrar mensajes.
|
Cita:
En el bloque try ... except haz lo siguiente para ver el texto del error:
|
Muchas gracias, voy a probarlo y en cuanto sepa algo ya lo comunico a ver que tal.
|
He probado lo que me dijiste pero no he podido ver el error porque es una aplicación que está en fábrica y no estoy todo el día encima para poder verlo, pero me ha dado errores al hacer consultas simples (SELECT * FROM X). No se si tendría que poner algo antes de realizar estas consultas para evitar este error (comprobar que no haya ninguna transacción abierta o algo así).
Seguiré investigando cosas a ver si puedo ver el error exacto que me da en el TRY para ponerlo aquí. |
Podrías guardar el texto del error en un fichero.
Deberías guardar la fecha y hora, el texto del error y quizás alguna otra información, como el sql que ha generado el error o los parámetros que le has puesto. Puede ser que le envíes parametros fuera de ranco o que si construyes el where te quede algo mal. Por ejemplo
Si edit1.text es vacío, el sql será y dirá que la sentencia SQL está incompleta o algo asi |
La franja horaria es GMT +2. Ahora son las 00:40:58. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi