Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   Manejo de Excepciones (https://www.clubdelphi.com/foros/showthread.php?t=91965)

GustavoCruz 13-06-2017 19:03:45

Manejo de Excepciones
 
Hola amigos del foro...

Tengo una excepción personalizada que dice "Faltan datos...bla...bla...bla..", pero cuando esta excepción se lanza me muestra además dos mensajes más
"ORA-06512 at "gustavo_cruz.pacientes_biu", line 17 "
"ORA-04088 error during execution of trigger 'gustavo_cruz.pacientes_biu'"1

Yo solamente necesito "Faltan datos...bla...bla...bla.."

Gracias de antemano por sus aportes


Gustavo Cruz

roman 13-06-2017 22:34:04

¿Esto ocurre al ejecutar la aplicación dentro del IDE o también fuera?

LineComment Saludos

GustavoCruz 13-06-2017 22:57:30

Hola Roman ocurre en ambos lados. Estuve leyendo ésto y lo que se plantéa es correcto pero en mi caso se trata de validar el contenido de unos campos y solamente necesito el mensaje de mi excepción

Gracias por tu ayuda


Gustavo Cruz

Casimiro Notevi 13-06-2017 23:09:03

Pon el código que veamos qué haces.

GustavoCruz 13-06-2017 23:13:13

Este es el Código
Código SQL [-]
CREATE TRIGGER GUSTAVO_CRUZ.PACTABLE_BIU0
  BEFORE INSERT OR UPDATE
  ON GUSTAVO_CRUZ.PACTABLE
  FOR EACH ROW
DECLARE
  e_datos EXCEPTION;
BEGIN
  IF (:new.pacdepcodigo = '')
    OR (:new.pacdepcodigo IS NULL)
  THEN
    :new.pacdepcodigo := : old.pacdepcodigo;
  END IF;
  IF (:new.pacmuncodigo = '')
    OR (:new.pacmuncodigo IS NULL)
  THEN
    :new.pacmuncodigo := : old.pacmuncodigo;
  END IF;

  IF ((LENGTH(:new.pactipo) = 0)
    OR (LENGTH(:new.pacnumero) = 0)
    OR (LENGTH(:new.pacape1) = 0)
    OR (LENGTH(:new.pacnom1) = 0)
    OR (LENGTH(:new.pacsexo) = 0)
    OR (LENGTH(:new.pacdepcodigo) = 0)
    OR (LENGTH(:new.pacmuncodigo) = 0)
    OR (LENGTH(:new.pacepscodigo) = 0))
  THEN
    RAISE_APPLICATION_ERROR(-20000, 'Faltan datos del paciente');
  END IF;

  IF ((:new.pactipo IS NULL)
    OR (:new.pacnumero IS NULL)
    OR (:new.pacape1 IS NULL)
    OR (:new.pacnom1 IS NULL)
    OR (:new.pacsexo IS NULL)
    OR (:new.pacdepcodigo IS NULL)
    OR (:new.pacmuncodigo IS NULL)
    OR (:new.pacepscodigo IS NULL))
  THEN
    RAISE_APPLICATION_ERROR(-20000, 'Faltan datos del paciente');
  END IF;

  IF (:new.cronico IS NULL)
  THEN
    :new.cronico := 0;
  END IF;
  IF (:new.ipsres IS NULL)
  THEN
    :new.ipsres := 0;
  END IF;
  :new.paccompleto := '';
  IF (:new.pacape1 IS NOT NULL)
  THEN
    :new.paccompleto := :new.pacape1;
  END IF;
  IF (:new.pacape2 IS NOT NULL)
  THEN
    :new.paccompleto := :new.paccompleto || ' ' || :new.pacape2;
  END IF;
  IF (:new.pacnom1 IS NOT NULL)
  THEN
    :new.paccompleto := :new.paccompleto || ' ' || :new.pacnom1;
  END IF;
  IF (:new.pacnom2 IS NOT NULL)
  THEN
    :new.paccompleto := :new.paccompleto || ' ' || :new.pacnom2;
  END IF;
  IF (:new.pacestado IS NULL)
  THEN
    :new.pacestado := 'Activo';
  END IF;

END;
/

Casimiro Notevi 14-06-2017 00:06:53

¿Y desde delphi?

GustavoCruz 14-06-2017 02:47:51

1 Archivos Adjunto(s)
Ahora simplemente pongo una dbgrid e intencionalmente lanzo la excepción te adjunto una imagen

Casimiro Notevi 14-06-2017 10:50:18

¿Pero eso es ejecutando desde delphi o desde fuera, independientemente?

cloayza 15-06-2017 21:24:57

Lo que sucede es que el texto del error contiene todo el string que se despliega:

Posible solución:
Código Delphi [-]
var
    STexto:String;
begin
 Try

...lineas de código
...

Except on E : Exception Do
begin
       {
       E.Message:='ORA-20000: Faltan datos...bla...bla...bla..'+#13+
                         'ORA-06512 at "gustavo_cruz.pacientes_biu", line 17'+#13+
                         'ORA-04088 error during execution of trigger '+#13
                         'gustavo_cruz.pacientes_biu0';
       }
       {Solución: extraer el texto que deseas visualizar, desde E.Message.}
       STexto:=Copy(E.Message, 1, 25); //Resultado =>ORA-20000: Faltan datos
        
       Showmessage(E.Message); //Mensaje completo

       Showmessage(STexto);  //Solo mostrara el texto que extrajiste de E.Message.
end

Todo lo anterior en base a suposiciones, ya que no incluiste el código donde controlas el error.

Espero te ayude, saludos cordiales


La franja horaria es GMT +2. Ahora son las 20:40:48.

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