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)
-   -   Inicio en interbase (https://www.clubdelphi.com/foros/showthread.php?t=27915)

Luis Castillo 03-12-2005 01:12:21

Inicio en interbase
 
HOla colegas....

Haber ...estoy iniciando en interbase y tengo algunas pregunticas para aquella persona amable que me pueda ayudar:

-He notado que el interbase no tiene el tipo boolean. Parece ser que hay que simularlo con el Char(1).....o que?

-Cuando estoy haciendo FOREIGN KEY a nivel de tabla yo configuro las acciones por si hay actualizaciones de la llave primaria a la que hace referencia las llaves foraneas...es decir ON UPDATE CASCADE ON DELETE CASCADE ETC... y se que estan los posibles valores tambien SET NULL (para poner en null la llave foranea si se borra la primaria) pero como hago para que cuando quiera borrar la llave primaria que tenga detalles en otra tabla, este no me permita la eliminacion y salga una excepcion...como si fuera paradox (y ojala una excepcion con un mensaje hecho por mi)

Thales 03-12-2005 11:25:54

Respecto de la primera pregunta, define un dominio de la siguiente manera:

Código SQL [-]
create domain TBoolean as
char(1) not null
check (value in ('S','N'));

a partir de entonces ya puedes usar el tipo TBoolean en tu base de datos.

Respecto de la segunda pregunta puedes usar al final de tu tabla

Código SQL [-]
on delete no action on update cascade

Con esto prohibes el borrado de registros a los que se hace referencia desde otra tabla y en caso de actualización de la clave, propagas los cambios a las claves secundarias de las otras tablas.

Un saludo

AGAG4 04-12-2005 18:11:08

Te Falto....
 
Te falto agregar lo siguiente Thales :
Cuan una tabla tenga relación (fk) con otras tablas hay que crear una Excepción Propia para avisarle al usuario la causa del error:

Código SQL [-]
CREATE EXCEPTION EX_BORRAR_MAESTRO 'No puede Borrar Maestro porque tiene relación con Detalles'

En delphi sólo cachas el error cuando borras el maestro Ejemplo:
Código Delphi [-]
try
Maestro.delete;
except
raise;
end;
//Si tiene relaciones te saltará la excepción con el mensaje que le agregastes.
Saludos....

Thales 05-12-2005 11:43:07

Puede ser muy interesante, en efecto, crear en la base de datos una excepcion que traduzca el mensaje que muestra por defecto interbase, pero con create exception sólo la creas, y deberías lanzarla también desde la base de datos (por ejemplo desde un trigger que se active antes de intentar el borrado), supongo que lo harás así.

Y, si me permites el comentario, respecto del código delphi que pones, no le veo mucho sentido a capturar una excepción para a continuación propagarla sin hacer nada antes.

Un saludo

AGAG4 05-12-2005 16:04:03

Asi es
 
Cita:

Empezado por Thales
Puede ser muy interesante, en efecto, crear en la base de datos una excepcion que traduzca el mensaje que muestra por defecto interbase, pero con create exception sólo la creas, y deberías lanzarla también desde la base de datos (por ejemplo desde un trigger que se active antes de intentar el borrado), supongo que lo harás así.

Y, si me permites el comentario, respecto del código delphi que pones, no le veo mucho sentido a capturar una excepción para a continuación propagarla sin hacer nada antes.

Un saludo

Que bueno que me corrijas, tienes razón se me paso comentarles sobre el uso de un trigger que se dispara antes del borrado y hacer una busqueda de la relación con otra Tabla para llamar la excepción, y por lo que en delphi corresponda ya es criterio de quien lo implemente, yo lo puse para poner un ejemplo, ya el tratamiento de la excepción es criterio del programador.

Saludos.


La franja horaria es GMT +2. Ahora son las 12:10:18.

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