Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-10-2005
Avatar de Juanito-Kun
Juanito-Kun Juanito-Kun is offline
Miembro
 
Registrado: abr 2005
Ubicación: Merida, Yucatan
Posts: 65
Poder: 20
Juanito-Kun Va por buen camino
Unhappy 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
VilArea es un excepcion que me tira un mensaje... lo malo es que no lo hace el trigger .. me sigue saliendo el mensaje de error por default..

que estoy haciendo mal?..
Responder Con Cita
  #2  
Antiguo 25-10-2005
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking 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'
Responder Con Cita
  #3  
Antiguo 26-10-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 26-10-2005
Avatar de Juanito-Kun
Juanito-Kun Juanito-Kun is offline
Miembro
 
Registrado: abr 2005
Ubicación: Merida, Yucatan
Posts: 65
Poder: 20
Juanito-Kun Va por buen camino
Wink 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
las dos primeras verifican si dos columas esta con nulas si estan nulas aparecen las excepciones.. eso si me lo hace.. pero el sqlcode no me lo ejecuta y creo que jachguate tiene razon...

pero entonces para que esta el sqlcode? ... en que casos de usa o como se usa..

saludos y gracias por responder...
Responder Con Cita
  #5  
Antiguo 26-10-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Te serviría en un caso como:

Código SQL [-]
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";

insert into otratabla (otrosvalores)

when sqlcode  -803 do
    exception "CodigoDuplicadoEnOtraTabla";
END

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.
Responder Con Cita
  #6  
Antiguo 26-10-2005
Avatar de Juanito-Kun
Juanito-Kun Juanito-Kun is offline
Miembro
 
Registrado: abr 2005
Ubicación: Merida, Yucatan
Posts: 65
Poder: 20
Juanito-Kun Va por buen camino
Thumbs up sqlcode trigger

Ok..

Gracias jachguate, sanxpue son muy amables..

saludos y que esten bien..
Responder Con Cita
  #7  
Antiguo 05-04-2006
Morphine Morphine is offline
Miembro
 
Registrado: ago 2004
Posts: 28
Poder: 0
Morphine Va por buen camino
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
^
no se si es por el momento en que ejecuta el trigger (BEFORE INSERT) o estoy preguntando por un sqlcode que es incorrecto (-803), lo que quiero es evitar la duplicidad de clave primaria en una tabla con clave combinada.
Responder Con Cita
  #8  
Antiguo 06-04-2006
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:12:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi