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 03-12-2005
Luis Castillo Luis Castillo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 102
Poder: 21
Luis Castillo Va por buen camino
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)
__________________
LK
Responder Con Cita
  #2  
Antiguo 03-12-2005
Avatar de Thales
Thales Thales is offline
Miembro
 
Registrado: ago 2005
Posts: 48
Poder: 0
Thales Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 04-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
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....

Última edición por AGAG4 fecha: 04-12-2005 a las 18:11:46. Razón: Corrección
Responder Con Cita
  #4  
Antiguo 05-12-2005
Avatar de Thales
Thales Thales is offline
Miembro
 
Registrado: ago 2005
Posts: 48
Poder: 0
Thales Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 05-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
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.

Última edición por AGAG4 fecha: 05-12-2005 a las 16:04:54. Razón: Corrección
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:02: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