FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Actualizar campo de tabla después de excepción
Hola a todos, a ver si alguien me puede dar una idea de como solucionar el siguiente problema: tengo un trigger before insert que si se cumple una determinada condición salta una excepción y también quiero que se meta en un campo del registro anterior (temporalmente hablando) un texto con el error.
Estoy probando de estas dos formas:
y con las 2 me salta la excepción pero no me hace el update. ¿Automáticamente cuando hay una excepción se cancela todo lo que hace el trigger? Estoy usando Firebird 2.5
__________________
No hope, no dreams, no love, my only escape is Underground Última edición por Axel_Tech fecha: 27-09-2010 a las 12:01:27. |
#2
|
||||
|
||||
Estoy incluso probando con un insert como lo pone en FirebirdSql.org y no funciona!!!
__________________
No hope, no dreams, no love, my only escape is Underground |
#3
|
||||
|
||||
Cita:
En efecto, si no estoy muy equivocado cuando haces una excepción estás cancelando la transacción y por lo tanto todos los cambios hechos en la tabla (y en el Trigger). Si no quieres que se cancelen cambios y simplemente quieres notificar de algo a tu aplicación, en lugar de usar excepciones usa eventos (POST_EVENT). Con un IBEvents capturarás en tu aplicación el evento que se lance en el trigger. http://www.delphiaccess.com/forum/in...p?topic=3135.0
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#4
|
||||
|
||||
Ya que estás usando Firebird 2.5, puedes lanzar la inserción del error en tu Log, dentro del contexto de otra conexión a la base de datos, y por lo tanto no se verá afectado por la transacción cancelada por la excepción.
http://www.firebirdsql.org/rlsnotesh...psql-exctstmnt Utiliza ON EXTERNAL en un EXECUTE STATEMENT.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
||||
|
||||
Gracias por contestar Guillotmarc, lo del IBEvents no lo puedo hacer porque la aplicación en cuestión está hecha en Visual Basic.NET, y lo del ON EXTERNAL lo estoy probando así:
y tampoco funciona salta la excepción pero no me hace el update. Se ve que también lo cancela. ¿Alguna idea?
__________________
No hope, no dreams, no love, my only escape is Underground |
#6
|
|||
|
|||
Otra opción...
Es correcto lo que menciona Guillotemarc con respecto de las transacciones. Sin embargo, como estás utilizando Firebird 2.5, entonces puedes hacerlo dentro de una transacción autónoma. Aqui pongo una posible solución a tu problema...
Por favor, antes de poner tal cual, este procedimiento revisa que TODA la lógica este correcta. Simplemente trato de ejemplificar que este problema se puede solucionar de esta manera. Saludos. Gerardo Suárez Trejo P.D. No dejes de publicar tu código final y platicarnos como te fue... saludos nuevamente |
#7
|
||||
|
||||
Justo lo que necesitaba Gallosuarez, funciona a la perfección. Es igual que como tú lo has puesto sólo que con 2 pequeñas correcciones: el ON es un IN y hay que poner la excepción después de la transacción autónoma:
Tampoco hace falta meterlo en un bloque WHEN, aunque también funciona. Que maravilla estas características nuevas en la versión 2.5... Mil gracias, salu2
__________________
No hope, no dreams, no love, my only escape is Underground |
#8
|
||||
|
||||
Cita:
http://www.ibphoenix.com/main.nfs?a=...E;ID=%27217%27 Me parece espectacular, no me lo esperaba. Aunque en este caso nos estropea lo que queríamos hacer, para un uso normal es mucho mejor tenerlo todo englobado en la misma transacción. NOTA: Por cierto, lo de declarar explícitamente una transacción autónoma está claro que es mucho mejor, más limpio. No recordaba esta característica nueva, gracias por proponerlo Gallosuarez.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
actualizar un campo de una tabla en sql desde delphi | josi | Conexión con bases de datos | 3 | 11-03-2008 05:37:20 |
Problemas con permisos despues de actualizar | Osorio | Firebird e Interbase | 1 | 07-02-2007 06:52:44 |
Actualizar un campo de una tabla con datos que se encuentran en otra tabla | Morphine | SQL | 4 | 15-12-2006 22:47:42 |
Pregunta fácil: DBEdit enlazado a un campo fecha: Excepcion | AlJasham | Conexión con bases de datos | 10 | 16-07-2004 17:24:51 |
actualizar tabla al calcular un campo autocalculado | Telemaco | Conexión con bases de datos | 14 | 08-04-2004 17:07:14 |
|