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 14-09-2005
micayael micayael is offline
Miembro
 
Registrado: sep 2005
Posts: 68
Poder: 19
micayael Va por buen camino
exceptions vs checks y FKs

Hola muchachos.-

Cuando yo creo un CHECK o una FK y trato de violarla aparece una mensaje de error mostrando el nombre del check o fk que no permite realizar el proceso mientras que si creo una excepcion puedo definir yo el mensaje que quiero que aparezca.

Entonces, no me conviene mas implmentar los CHECKs y FKs por medio de excepciones? o tengo que hacer ambos que me proponen ustedes los genios?
Lo mismo pasaria con los indices UNIQUE. Lo que no se es si se puede definir el mensaje para los CHECKs y UNIQUEs. Es decir, para sus propias restricciones

Última edición por micayael fecha: 14-09-2005 a las 17:42:58.
Responder Con Cita
  #2  
Antiguo 14-09-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Lo normal sería crear índices, checks y FK's; Cuando realizas una operación (incorrecta) con cualquiera de ellos "saltará" una excepción; En ese punto la capturas y mustras tu mensaje de error (normalmente más claro de cara al usuario).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 14-09-2005
micayael micayael is offline
Miembro
 
Registrado: sep 2005
Posts: 68
Poder: 19
micayael Va por buen camino
aahh. Eso esta interesante. pero como capturo ese momento? Ahi deberia llamar a mi exepcion.
Responder Con Cita
  #4  
Antiguo 15-09-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Bueno, sería algo así:

Código Delphi [-]
 
   ...
   // Comienza el bloque de proteccion
   try
     Tabla1.Post;  // Supongamos que ésto genera excepcion
   except
     on E:EDBEngineError do begin
       // Error de Base de Datos....
       // Para afinar más puedses intentar saber de qué tipo es el erorr...
       if ((E as EDBEngineError).Errors[0].Errorcode = eKeyViol) then begin
          Application.MessageBox('Imposible dar alta ese registro 
                                          ya  existe','Atención',mb_Ok +
                                           mb_IconQuestion);
       end
       else if....
          // puedes capturar el resto de la misma forma...
       end;
     end
     else begin
       raise;   // dejamos que siga....
     end;
   end;

Las constantes para los errores más comunes:
  • eKeyViol = 9729;
  • eRequiredFieldMissing = 9732;
  • eForeignKey = 9733;
  • eDetailsExist = 9734;
  • eSqlGralerror = 13059;
No lo he compilado, espero no haber cometido muchos errores; Pruébalo y si tienes problemas ya dirás...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 15-09-2005
micayael micayael is offline
Miembro
 
Registrado: sep 2005
Posts: 68
Poder: 19
micayael Va por buen camino
Guuuaaaauuuuu.,

La verdad que es bien complejo todavia para mi. Para empezar no se ni siquiera si es un trigger o alguna otra cosa.

Me podrias especificar eso (si es un trigger)

Sabes de donde puedo encontrar informacion sobre los tipos de exepciones y sobre las variables que usas ahi para crear tu mensaje? Es propio de firebird?

Es parecido al uso en visual basic. Yo estoy usando php

Última edición por micayael fecha: 15-09-2005 a las 15:20:50.
Responder Con Cita
  #6  
Antiguo 15-09-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Si uqieres personalizar aun mas tu errores lo puedes hacer el evento on exception ya que este captura todos lo errores.

Lee un poco sobre esto.

Espero te sirva
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #7  
Antiguo 21-09-2005
HombreSigma HombreSigma is offline
Miembro
 
Registrado: jun 2003
Ubicación: World
Posts: 114
Poder: 21
HombreSigma Va por buen camino
A mi parecer es mejor no alterar los mensajes estandar de la base de datos, simplemente se crean las restricciones de integridad y demas validaciones centralizadas en la misma; luego a traves del lenguaje de programacion, sea Delphi u otro, se capturan las excepciones generadas por la BD y los codigos de error programando los mensajes correspondientes.

Sin embargo, si insistes en hacer lo tuyo, primero bajate el manual de interbase desde el foro. De alli tome este ejemplo de como crear una excepcion en Firebird

Esta sentencia sql crea una excepcion llamada TuExcepcion:

Código:
CREATE EXCEPTION TuExcepcion ’Numero de empleado invalido';
Posteriormente, otra sentencia como la siguiente, ejecutada desde un procedimiento almacenado o un trigger debe generar la excepcion creada cuando el codigo de error de la base de datos SQLCODE es -530, que corresponde a una violacion de integridad referencial:

Código:
. . .
WHEN SQLCODE -530 DO
  EXCEPTION TuExcepcion;
....
__________________
SigmaMan
Responder Con Cita
  #8  
Antiguo 22-09-2005
micayael micayael is offline
Miembro
 
Registrado: sep 2005
Posts: 68
Poder: 19
micayael Va por buen camino
Me das una manito hombre sigma. cual es el manual?
Estoy buscando por la web y no encuentro ese manual.
Por lo menos si me dices el nombre del manual asi lo busco.
Eso que me dices es mas o menos lo que quiero. por ahi puedo crear una tabla con los tipos de errores y en todo caso los consulto desde el cliente.
Responder Con Cita
  #9  
Antiguo 22-09-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
De esta página, bajatelo todo, todo ;-)

http://www.firebirdsql.org/index.php?op=doc&id=userdoc

* As individual zipped PDF files:
* API Guide (1.69mb)
* Data Definition Guide (1.20mb)
* Developers Guide(1.46mb)
* Embedded SQL Guide (1.36mb)
* Operations Guide (1.45mb)
* Language Reference (1.28mb)
* Getting Started (0.43mb)
* Migration Guide


Data definition guide, Developers Guide, los he leido en vacaciones y no tienen desperdicio alguno. (no entiendo de libros de lectura ni literatura, así que pillé esos 2)

Language Reference, es para tenerlo a mano y consultar la sintaxis concreta de cada cosa, una vez que ya tienes los conocimientos.

Un saludo
Responder Con Cita
  #10  
Antiguo 22-09-2005
micayael micayael is offline
Miembro
 
Registrado: sep 2005
Posts: 68
Poder: 19
micayael Va por buen camino
excelente maestro. Te debo una.
Responder Con Cita
  #11  
Antiguo 24-09-2005
HombreSigma HombreSigma is offline
Miembro
 
Registrado: jun 2003
Ubicación: World
Posts: 114
Poder: 21
HombreSigma Va por buen camino
Mira en el foro:

http://www.clubdelphi.com/ib/documen...umentacion.php
__________________
SigmaMan
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


La franja horaria es GMT +2. Ahora son las 20:33:44.


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