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 04-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
¿existe "on delete restrict" en Firebird ?

Hola amigos:

He estado buscando pero se vé que no lo suficiente.

Uso Firebird 1.5 e Ib Expert Personal, pero este último, al establecer las reglas de borrado sobre una clave ajena (foránea, foreign key) solo me da elegir:

- no action (no viene ayuda, no sé si equivale "restrict" ¿?)
- set null
- cascade
- set default

El hecho es que me extraña que no venga la regla "Restrict / prohibit" o parecido.

Gracias por adelantado.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #2  
Antiguo 04-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola lepe,

Cita:
Interbase/Firebird: Interbase didn't have support for RESTRICT. Not sure about firebird. (use NO ACTION instead)
Aqui los post completos a esa pregunta.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 04-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Gracias egostar, aunque eso también es un problema, porque no encuentro el significado.

NO ACTION significa que al borrar en la tabla principal, ¿no hace nada en la tabla con clave ajena?... o sea, se quedaría un Id huérfano, si es así no me interesa.

De momento lo estoy solucionando así, aunque no me gusta:
Código SQL [-]
CREATE TRIGGER CATEGORIA_BD FOR CATEGORIA
ACTIVE BEFORE DELETE POSITION 0
as
declare variable cuantos integer;
begin
    select first 1 idcategoria from Trabajador t
    where t.Idcategoria = old.Idcategoria
    into :cuantos;

    if (cuantos > 0) then
        exception NotdeleteCategoria;
end

Ya en delphi, en un ApplicationsEvents:
Código Delphi [-]
  if (e is EMDOError) then
  if (e is EMDOFirebirdError) then
  begin
    Notifica(maviso, dtm.ParseError(EMDOError(E)));
  end
ParseError, lo único que hace es quitar el texto "exception X" de la excepción.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 04-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola Lepe, buscando encontré esto.

Connections between temporary tables


No se si te pueda ayudar porque desconozco el tema, pero quiero aprenderlo y me interesa mucho para aplicaciones que tengo en mente.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 04-04-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Haciendo una búsqueda:

http://www.ibphoenix.com/main.nfs?a=...ge=ibp_50_cdri

Cita:
NO ACTION: The foreign key is left unchanged. This may cause the primary key update to fail due to referential integrity checks. (default)
Esto es, hacer:

Código SQL [-]
alter table tabla_hijo add constraint campohijo_ref_campopadre
foreign key (campo_hijo) references tabla_padre(campo_padre) 
on delete no action

es equivalente a hacer:

Código SQL [-]
alter table tabla_hijo add constraint campohijo_ref_campopadre
foreign key (campo_hijo) references tabla_padre(campo_padre)

Yo personalmente lo uso de la segunda forma y no tengo problemas...


Saludos...
Responder Con Cita
  #6  
Antiguo 13-04-2007
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
o sea, se quedaría un Id huérfano, si es así no me interesa.
Firebird no permite referencias huerfanas, esto va en contra de la Integridad de los datos,
asi q NoAction significa Restrict..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #7  
Antiguo 13-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Delfino, tienes que conectarme más a menudo a los foros ehhh jejeje

Realmente no sé como hice las pruebas, quizás tenía creado el campo pero no definida la clave ajena, no sé. Lo cierto es que realmente funciona como dices, así que tendré que eliminar los 7 triggers que había creado y las 7 exceptions...y vuelta a organizar las cosas.

En principio al intentar borrar la clave ajena aparece el nombre de la restricción en la excepción, así que lo capturaré en el OnException del ApplicationsEvents, para mostrar un texto más descriptivo.

Muchas gracias por la info, me sonaba raro que no existiese.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 14-04-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
¡Que susto! Al ver que que Lepe estaba preguntando sobre restrict... me hizo dudar de lo que yo había leído en algún lado.
Yo ya estaba por responderte que tenía entendido que NoAction es equivalente a Restrict, pero preferí leer el hilo para enterarme mejor (y en una de esas yo también estaba confundido).

Gracias Delfino por traerme la calma... ¡vaya sustito me hiciste llevar Lepe!

En serio... el hecho que Lepe o cualquier otro de los grandes maestros salte con un pregunta sobre Firebird me hace dar un susto bárbaro... ¡yo ando iniciandome y si meto la pata... quien me salva! Me falta aprender mucho (a pesar de haberme leído casi todos los pdfs que están en su sitio y en Firebird Mexico

Bueno... de nuevo... gracias Delfino.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 14-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
¿qué pasa? ¿que yo no puedo tener dudas?

O no lo he leído, o lo he olvidado .

De grande no tengo nada... 1,70 más o menos

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 14-04-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Lepe
¿qué pasa? ¿que yo no puedo tener dudas?

O no lo he leído, o lo he olvidado .

De grande no tengo nada... 1,70 más o menos

Saludos
Claro... quien no puede tener dudas... sólo contaba mi anédota. Es que a pesar de que estoy con Firebird desde hace ya un tiempo ¿Tal vez 6, 8 meses? no me siento muy seguro sobre el manejo... y el gran susto mio es que haga una tontera y no poder resolverla.
Y yo también he pasado por la misma duda que te ha invadido... y la verdad es que por un breve momento el chucho se apoderó de mi.
Gracias a dios, todo en calma...... me voy a tomar la presión

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 11:01:19
"error/record delete" con update m8estrella83 SQL 2 09-08-2006 18:25:25
"No existe parche para la estupidez humana" Neftali [Germán.Estévez] Noticias 4 30-06-2006 19:36:58
Error "Ya existe un componente con el nombre QRStandarPreview" Jose Manuel Impresión 5 13-06-2003 07:55:26


La franja horaria es GMT +2. Ahora son las 18:21:56.


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