![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Si lo que quieres es mostrar mensajes simples a los usuarios, puedes hacer algo así, ejemplo:
Tienes una tabla de usuarios que contiene un usuario predeterminado que no se debe borrar: Usuario predeterminado: Creas la excepción por si intentan borrarlo, junto al texto que se mostrará: Creas el trigger donde se controlará que no se borre el usuario admin: Y eso es todo. Otra cosa diferente es mostrar los mensajes tal y como se generan por la base de datos, puedes hacer algo así: Bueno, lo he escrito todo de memoria, pero te sirve de referencia.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#2
|
||||
|
||||
|
Gracias por la respuesta Casimiro. En el trigger que yo he puesto lo que trato de impedir es que se den de alta dos registros para el mismo valor de Nombre. Tal como lo tengo creado al producirse unique_key_violation el mensaje que se muestra es el propio de Firebird y no el que está declarado en la excepción; no veo como "sacar" el valor de la excepción. Ese el problema que tengo.
|
|
#3
|
||||
|
||||
|
Aqui no tengo firebird para probar pero asi por encima creo que la cosa va por aqui.
Si quieres tener una excepcion personalizada, debes hacer la validacion personalizada.
|
|
#4
|
||||
|
||||
|
La otra opción que se me ocurre para lo que buscas hacer, requiere que todos los mensajes de error incluyan dos caracteres arbitrarios que circunscriban al mensaje señalizándolo (para el ejemplo elegí "~" y ".").
Firebird:
C++ Builder: Código PHP:
![]() Se verá así: ![]() Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#5
|
||||
|
||||
|
La idea de exfisa de insertar algún carácter raro no parecía mala, pero no vale. He puesto ese carácter ~ en el mensaje de la excepción, pero al producirse el error el mensaje que me devuelve es el genérico de FB:
Cita:
Código:
CREATE EXCEPTION USUARIO_CONECTADO '~Este usuario está activo en otro terminal~' Código:
CREATE TRIGGER CONEXION_NEW FOR CONEXION
ACTIVE BEFORE INSERT
POSITION 1
AS
BEGIN
NEW.Id_Conexion = GEN_ID(ID_Conexion, 1);
WHEN GDSCODE unique_key_violation DO BEGIN
EXCEPTION USUARIO_CONECTADO;
END
END
|
|
#6
|
||||
|
||||
|
Cita:
Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 28-12-2015 a las 15:50:49. Razón: corrección |
|
#7
|
||||
|
||||
|
Efectivamente no hay congruencia por que estas en en evento BEFORE osea que en este punto los datos no han sido insertados en la tabla por lo tanto no se ha producido ninguna excepcion por lo tanto
Nunca entra por que hasta este punto no ha ocurrido ninguna excepcion. Resulta que cuando se intentan escribir los datos sobre la tabla (despues de haber pasado por este triggger) es cuando realmente se produce la excepcion y por eso el mensaje que se lanza es el nativo de FB no el personalizado. Te sugiero que revises el mensaje anterior que te escribi. Para que valides en el trigger (antes de... ) y desde alli dispares la excepcion personalizada. Saludos. |
|
#8
|
||||
|
||||
|
Cita:
Código:
int p1 = EI->Message.Pos("~");
int p2 = EI->Message.LasteDelimiter("~");
1. He definido la excepción como he comentado antes, incluyendo ese carácter ~ al principio y al final del mensaje. 2. He redefinido el trigger así: Código:
CREATE TRIGGER CONEXION_NEW FOR Conexion
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.Nombre IN (SELECT Nombre FROM Conexion)) THEN
EXCEPTION USUARIO_CONECTADO;
NEW.Id_Conexion = GEN_ID(ID_Conexion, 1);
END
Cita:
Cita:
![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Duda Sobre Excepciones - Propagar Excepciones entre los formularios | Neeruu | Varios | 2 | 26-02-2010 20:36:50 |
| Gestionar contraseñas ?????????? | david_uh | Varios | 11 | 04-01-2008 18:46:17 |
| Como gestionar un proyecto | Aprendiendo | Varios | 1 | 30-06-2007 00:28:14 |
| Gestionar excepciones | Angel.Matilla | C++ Builder | 0 | 29-01-2007 13:41:54 |
| Gestionar Base de Datos | tarco35 | Conexión con bases de datos | 1 | 22-11-2003 15:55:33 |
|