FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
||||
|
||||
sqlcode
hola que tal, estoy trabajando con Delphi 7 y Firebird 1.5..
bueno tengo el siguiente detalle.. tengo un trigger que quiero que me verifica si la llave esta duplicada si lo esta que me arroje un mensaje.. Código:
CREATE TRIGGER "tgrVerDatArea" FOR TBLCATARE ACTIVE BEFORE INSERT OR UPDATE POSITION 0 AS BEGIN when sqlcode -803 do exception "VilArea"; END que estoy haciendo mal?.. |
#2
|
|||
|
|||
Pues
Los trigger no regresan nada esa es la diferencia a un Stored Procedure, osease que lo que quieres hacer lo vas a hacer con un Stored Procedure
__________________
saludos desde Puebla Mexico.. asanxt@hotmail.com "como siempre a sus ordenes y siempre con buena cara" 'lolita me excitas, perversa piel de melocotón' |
#3
|
||||
|
||||
El trigger before insert no puede "cachar" un error que no se ha producido cuando se invoca (el SQL code ocurrirá un instante después, cuando se intente aplicar el registro a la bd). El trigger after tampoco servirá, pues dado que el error ya ocurrió, nunca llega a dispararse.
En general, no podes capturar en el trigger un error que se generará por la inserción del registro en la bd. Podrias hacer un select sobre la misma tabla verificando si ya existe un valor con la misma clave para elevar tu propia excepción, pero esto solo añadirá carga al servidor, a mi juicio, innecesaria. ¿Por que no capturas el error desde donde está intentando insertarse el registro? Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#4
|
||||
|
||||
trigger sqlcode
hola que tal he leido las respuestas que me mandan..
tengo el siguiente trigger: Código:
CREATE TRIGGER "tgrVerDatArea" FOR TBLCATARE ACTIVE BEFORE INSERT OR UPDATE POSITION 0 AS BEGIN if (new.cvecatare is null) then exception "CveArea"; if (new.descatare is null) then exception "NomArea"; when sqlcode -803 do exception "VilArea";END pero entonces para que esta el sqlcode? ... en que casos de usa o como se usa.. saludos y gracias por responder... |
#5
|
||||
|
||||
Te serviría en un caso como:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate Última edición por jachguate fecha: 26-10-2005 a las 06:57:27. |
#6
|
||||
|
||||
sqlcode trigger
Ok..
Gracias jachguate, sanxpue son muy amables.. saludos y que esten bien.. |
#7
|
|||
|
|||
Al final pudiste mostrar el mensaje de excepcion?, como lo hiciste, probe de la forma que dice en el ejemplo y funciona de todo menos la linea:
Código:
begin .... .... when sqlcode -803 do exception nombreexcepcion end ^ |
#8
|
||||
|
||||
Buenas a to er mundo.
a) un trigger before, la palabrita "before", lo dice claramente en englies pitinglis, antes de..., por lo que es imposible que devuelva una excepción por duplicidad de clave, ya que aun no se ha producido la actualización del registro en la tabla. b) con el after, sucede lo mismo. Se ejecuta despues de actualizar el registro en la tabla. Posibles controles a realizar: a) En el trigger, realizar una búsqueda del registro y generar la excepción si se duplica. b) Que sea la BD quien controle la duplicidad y controlar el error en la aplicación. Personalmente me decanto por el segundo caso "b)".
__________________
PepeLolo El hombre el único virus que mide más de unas cuantas micras |
|
|
|