Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   EXCEPTION con parametros u otro comando para abortar (https://www.clubdelphi.com/foros/showthread.php?t=42004)

fcios 31-03-2007 02:15:31

EXCEPTION con parametros u otro comando para abortar
 
Utilizo firebird 1.5

¿ se puede definir una EXCEPTION con parametros ?
¿ como ?
ó ¿ que otro comando puedo utilizar para abortar ?

Al llamar a una EXCEPTION le quiero mandar el mensaje a mostrar

gracias

Héctor Randolph 31-03-2007 03:01:28

Hola fcios

Cita:

Al llamar a una EXCEPTION le quiero mandar el mensaje a mostrar
Asi puedes definir la exception y el mensaje que enviará

Código SQL [-]
   CREATE EXCEPTION mi_exception_1 “Mi mensaje de error 1.”;

Dentro de un procedimiento o función puedes levantar la exception así:

Código SQL [-]
  IF (VAR1>0) THEN
    EXCEPTION  mi_exception_1;

Saludos

fcios 31-03-2007 05:33:34

Gracias Hector,
lo que quiero mostrar es distinto para cada registro y no me parece correcto crear una excepcion para cada valor de registro,

lo que quiero hacer es llamar a una exepcion con un parametro, por ejemplo con el valor de un campo,

o abortar un trigger de un delete y mostrar el valor de un campo

ej.
CREATE EXCEPTION mi_exception_1(PARAMETRO1 string);

y la usaria:
IF (VAR1>0) THEN
EXCEPTION mi_exception_1(CAMPO2);

gracias

Héctor Randolph 31-03-2007 05:43:28

Puedes crear una exception con un mensaje de error genérico, por ejemplo:

Código SQL [-]
 CREATE EXCEPTION ERR_GUARDAR_REG "Error al guardar el registro : ";

y después le concatenas otros mensajes dependiendo del tipo de error

Código SQL [-]
  IF A>B THEN
   EXCEPTION ERR_GUARDAR_REG 'Otros mensajes' || ' A es mayor a B';

  IF A=B THEN
   EXCEPTION ERR_GUARDAR_REG 'Otros mensajes' || ' A es igual a B';

Saludos

Héctor Randolph 31-03-2007 05:56:02

Por supuesto esa concatenación puede incluir algún campo de tus tablas, si es VARCHAR() lo concatenas directamente, si es de otro tipo puedes aplicar CAST();

Código SQL [-]
   EXCEPTION ERR_GUARDAR_REG 'Error en CampoCadena ' || CAMPO_CADENA ;

   EXCEPTION ERR_GUARDAR_REG 'Error en CampoInteger ' || CAST(CAMPO_INTEGER AS VARCHAR(14)) ;

Saludos

fcios 31-03-2007 06:55:47

Eso es lo que necesito pero no lo puedo hacer funcionar :(

tengo
CREATE EXCEPTION ERR_GUARDAR_REG 'Error al guardar el registro : ';

y la llamo con
EXCEPTION ERR_GUARDAR_REG 'Error en CampoCadena ' || CAMPO_CADENA ;

pero lo unico que me muestra es el mensaje de la excepcion 'Error al guardar el registro : '

¿ que me falta ? :confused:

gracias

Héctor Randolph 31-03-2007 07:20:32

Acabo de hacer esta prueba y funciona

Código SQL [-]
CREATE PROCEDURE NEW_PROCEDURE (
    A INTEGER,
    B INTEGER)
AS
begin
  IF (A>B) THEN
    EXCEPTION ERR_GENERICO  'A es mayor a B';

  IF (A=B) THEN
    EXCEPTION ERR_GENERICO  'A es igual a B';
end^

Esto lo ejecute en línea de comandos con ISQL desde la carpeta de FireBird 2.0

Código:

SQL> execute procedure new_procedure(0,0);
Statement failed, SQLCODE = -836
exception 1
-ERR_GENERICO
-A es igual a B
-At procedure 'NEW_PROCEDURE'
SQL>


fcios 31-03-2007 07:37:16

como tenes definido el CREATE EXCEPTION ERR_GENERICO ?

si lo defino sin el mensaje me da error en ;
CREATE EXCEPTION ERR_GENERICO;

(estoy utilizando FB 1.5 y actualmente no puedo pasar a la 2.0 )
gracias

Héctor Randolph 31-03-2007 07:41:12

Probablemente sea por la versión, la exception la creo de la manera habitual

Código SQL [-]
CREATE EXCEPTION ERR_GENERICO 'Error: ';

fcios 31-03-2007 07:49:32

bueno muchas gracias Hector, si se te ocurre otra idea bienvenida será, gracias

fcios 31-03-2007 08:39:16

PERDON PERDON no me funcionaba porque la estaba disparando en otro triggger

ESTO FUNCIONA CORRECTAMENTE

CREATE EXCEPTION ERR_GUARDAR_REG 'Error al guardar el registro : ';

y la llamo con
EXCEPTION ERR_GUARDAR_REG CAMPO_CADENA ;

si la lllamo con un string mas campo_cadena me da error
EXCEPTION ERR_GUARDAR_REG 'Error en CampoCadena ' || CAMPO_CADENA ;

Pero con esto es suficiente
MUCHAS GRACIAS HECTOR


La franja horaria es GMT +2. Ahora son las 09:52:43.

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