FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola amigos, retomando el tema...
resulta que tengo una db firebird 2.5.4, en la que declaro unas excepciones; una de ellas es 'no_borrar'
en el código no sé cómo capturar la excepción de tal manera que sólo me aparezca el texto de la excepción sin que me diga el resto de cosas, ej. nombre de la excepción, trigger en el cual se ha lanzado, ubicación de la línea de código... yo sólo quiero la descripción del error "No puedes eliminar el registro porque..." De antemano gracias por vuestra ayuda Gustavo Cruz |
#2
|
||||
|
||||
Cita:
También has de notar que no es obligatorio usar el objeto lanzado. Incluso puedes hacer: Ese código mostrará el mensaje "[Ignorante] Hubo una excepción" independientemente de lo que haya en el objeto de excepción. De todas formas, no es recomendable. Mejor usar correctamente las excepciones: Así mostrará el mensaje de error, y únicamente el mensaje de error. |
#3
|
||||
|
||||
Tal y como comenta Ñuño, usa excepciones, y usalas sabiamente. No solo porque muestran un mensaje de error, sino porque ademas cortan la ejecucion del codigo
|
#4
|
||||
|
||||
Hola Ñuño, gracias por tu respuesta lo que no quiero es lo que aparece en la imagen que te adjunto.
Yo solo quiero es "Error al intentar borrar un registro protegido por el sistema" Gracias por vuestro tiempo Gustavo Cruz Última edición por GustavoCruz fecha: 27-10-2015 a las 18:26:50. Razón: Completar mensaje |
#5
|
||||
|
||||
Creo que no has entendido bien lo que he escrito. Reléelo, compara tu código con el mio, y haz pruebas.
|
#6
|
||||
|
||||
El caso es que Firebird añade información al mensaje de error, así que no queda más remedio que buscar texto y eliminar lo que no te hace falta.
El código intuyo que sería algo así:
Creo también aparecerá el texto "exception 1 NO_Borrar" en el mensaje... es que no tengo Delphi a mano para probar y hace mucho que no las uso. Si se te complica demasiado, en el texto de la excepción en Firebird, defínela como : Exception 1 = '##No puede borrar algo de sistema @@'; Así ya sabes que tienes que copiar solo entre las ## y las @@ ... por ejemplo.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#7
|
||||
|
||||
Voy a dar mi apreciacion:
Las excepciones no deben ser user friendly. Deben mostrar la mayor cantidad de detalle, por mas "tecnico" que sea, de cual fue la causa del error, el estado de los objetos que intervenian en ese momento.. mientras mas cosas mejor. Una buena excepcion no solo contiene eso, sino que tambien deberia indicar posibles soluciones o donde mirar. En tu codigo estas cometiendo el grave error de capturar todas las excepciones y mostrar "no pudiste borrar porque es un registro protegido por el sistema". Quiere decir que si ocurre una excepcion EOutOfMemory se va a mostrar ese mensaje, si ocurre una EAccesViolation te va a decir "no podes eliminar un registro protegido por el sistema". Estas basicamente escondiendo errores de implementacion que vaya a saber que repercusion tienen, que estados inconsistentes estas dejando por ahi, o que operaciones estas bloqueando por una razon que no es Escribe excepciones que sean amigables para el programador (tu mismo!!). Yo antes hacia cosas similares a esa, ponia un mensaje de error "generico" ej: "no se pudo grabar el cliente". Genial gracias, ahora porque no se pudo? Viole una primary o unique key? Deje un campo en null? Me quede sin memoria? No instancie un objeto o lo destrui antes sin querer? Error de sintaxis sql? La tabla no existe? Como puedo saberlo?????? Facil, te abres el Delphi, y que el depurador te lance la excepcion, para nada cool eh Considera este codigo:
Es una pequeña mejora al anterior. En realidad la pregunta que yo me hago es, porque existe la posibilidad de llegar a una situacion de "borrar un registro protegido por el sistema"? No es mejor que nunca se pueda llegar a tal cosa? Realmente, vas a iniciar una transaccion, hacer rollback o commit, solo para despues decir: "esto no lo puedes borrar"? Si hay un conjunto de registros que no se pueden borrar y otros si, entonces ahi la cuestion es, antes de intentar hacer cualquier cosa, validar que sea un registro protegido, y de ser asi, elevar una excepcion
Las excepciones son eso: excepciones. Algo realmente malo que no deberia pasar. Son casos raros (por evitar el abuso de la palabra, casos excepcionales). Y si algo de esto que no es normal que pase, lo mas logico seria obtener la mayor cantidad de informacion posible, puesto que en algunos casos un tonto EAccessViolation puede ser trivial (en otros no!), pero que tal si no se puede reproducir la excepcion siempre? Tu codigo es 100% deterministico? Última edición por AgustinOrtu fecha: 29-10-2015 a las 00:34:57. |
|
|
|