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 17-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Ok, ahora lo entiendo.

He buscado la forma de construir las excepciones, y parece que puedes hacer algo como:
Código SQL [-]
if (new.nombrebanco is null) then exception ERR_NO_TITULO 'Debe rellenar el titulo';
No se si te dará toda la informacion, pero esta linea "at trigger 'tabla_bi line 21 col 34'" es algo que yo no querria quitar, puesto que te indica donde esta el error.
Para este caso, es obvio, y ya sabes lo que esta mal, pero en otros casos esa info es importante.

Yo por costumbre lo que hago es comprobar los valores antes de hacer el post, y si no cumplen los requisitos, mensaje y para atras. No uso muchos compos dbaware, y cuando los uso no son para edicion, asi que puedo permitirme esto.

defcon1 sugiere capturar los error_code, yo creo que tambien se podrian validar los datos en el evento onBeforeUpdate, y si alguno no cumple se cancela el post y se le envia un mensaje al cliente.

ya nos contaras
Responder Con Cita
  #2  
Antiguo 17-12-2008
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 18
Galahad Va por buen camino
solucionado de otra manera

Cita:
Empezado por Sick boy Ver Mensaje
Ok, ahora lo entiendo.

No se si te dará toda la informacion, pero esta linea "at trigger 'tabla_bi line 21 col 34'" es algo que yo no querria quitar, puesto que te indica donde esta el error.
Para este caso, es obvio, y ya sabes lo que esta mal, pero en otros casos esa info es importante.
el tema es que esa información al usuario no le deberia de aparecer, yo pretendia utilizar la excepción para que el servidor le mandará el mensaje que yo le indico en la excepción 'exclusivamente' y no grabara el registro.
No entiendo porque no puede ser asi... no obstante, lo he resuelto como tu bien dices, desde la parte del cliente, haciendo la prevalidación desde el evento beforepost del componente tfibdataset, pero ya comento, tiene
que haber alguna manera facil de 'formatear' esos mensajes de excepción generados por el usuario.
la opción de defcon1 es muy válida, aunque pienso que no se adapta muy bien a este caso, ya que simplemente queria utilizar la excepción en el servidor como un 'comprobador de campos', quizás lo hubiese podido hacer desde la definición de la columna de la base de datos con la cláusula CHECK...,
gracias a todos,, un saludo...
Responder Con Cita
  #3  
Antiguo 17-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Puedes usar la opción de defcon1 perfectamente.... pero en lugar de usarlo en un try... except, coloca ese código del except en un ApplicationsEvents.OnException.

Así la misma rutina de gestión de excepciones la tienes centralizada en un único sitio y te vale para todos los errores de la aplicación.

Si no quieres que muestre todo el mensaje cárgate el mensaje original de la excepción y pones el tuyo.... a ver si me explico con código:
en el applications.OnException
Código Delphi [-]
var 
  personal, original:string;
// E:Exception viene definida en los parámetros de este evento.
 personal := EmptyStr;
 if E is EIBInterbaseError then
 begin
  case EIBInterBaseError(E).IBErrorCode of
  $14000019: personal := 'Deadlock producido, pepe';
  $14000888: personal := 'El título no puede estar vacio';
  end;

  MiLog.Add(E.Message); // grabar mensaje original
  E.Message := personal;
  Application.ShowException(E);
end;
Application.ShowException no estoy muy seguro, creo que es la forma correcta, pero no recuerdo si pertenece a "Application" o es una rutina escondida...

También puedes usar en Interbase un prefijo para todas tus excepciones, por ejemplo al definir la excepción lo haces así:
Código SQL [-]
exception "Mi_excepcionIBInicio El usuario no puede estar en blanco  Mi_excepcionIBFin"
exception "Mi_excepcionIBInicio El código debe ser mayor que cero Mi_excepcionIBFin"
Ahora en el applications.OnException buscas la cadena prefijo "Mi_excepcionIBInicio" y sólo copias el texto hasta el sufijo "Mi_excepcionIBFin"

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 17-12-2008 a las 16:35:26.
Responder Con Cita
  #4  
Antiguo 17-12-2008
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 18
Galahad Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Puedes usar la opción de defcon1 perfectamente.... pero en lugar de usarlo en un try... except, coloca ese código del except en un ApplicationsEvents.OnException.

Así la misma rutina de gestión de excepciones la tienes centralizada en un único sitio y te vale para todos los errores de la aplicación.

ok, gracias, creo que ahora si que lo tengo claro, me pongo a la faena de crear un manejador de errores,,, universal...
gracias a todos...
Responder Con Cita
  #5  
Antiguo 30-12-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
resp

El problema no es del manejador si no de los componentes que estes usando. Lo que hacer es sobreescribir el codigo del componente donde se lansa la exception. Y es si los componentes no dispones de las fuentes podrian crean on procedimiento onexception global ya asignarselo a al aplicacion y hay verificas si le exception es del tipo d einterbase o firebird y arreglas la caeena a tu conveniencia.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mensaje de error: Debugger Exception Notification. cesar_gta86 Varios 1 02-07-2008 17:23:57
Path completo en la red RebeccaGL Redes 9 18-02-2008 20:15:18
Listado completo de tabla teclilla Impresión 3 15-02-2008 22:50:58
el codigo completo ElDioni SQL 2 11-07-2005 17:39:41
Informe Completo Franklim Impresión 5 02-04-2004 13:45:29


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


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