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)
-   -   error en firebird 2.0 (https://www.clubdelphi.com/foros/showthread.php?t=44487)

ebeltete 07-06-2007 14:16:50

error en firebird 2.0
 
Hola, trabajo con Firdbird 2.0 y Delphi 5, estoy creando una bbdd, con una tabla y varias referenciales, venia todo bien hasta que me aparecio un error y no se porque es, las tablbas la tengo creadas, la maestra "clientes" y la detalle "departamentos", con este codigo lo hice para otras tablas pero en esta "departamentos" me aparece un error.
Hago lo siguiente:
ALTER TABLE clientes ADD CONSTRAINT FK_DEPTO FOREIGN KEY (cl_DEPTO) REFERENCES DEPARTAMENTOS (CODIGO) ON UPDATE CASCADE ON DELETE NO ACTION;

Este es el error:
ISC ERROR MESSAGE:
violation of FOREIGN KEY constraint "PK_DEPTO" on table "DEPARTAMENTOS"
Foreign key reference target does not exist

PK_DEPTO es la PRIMARY KEY de la tabla "departamentos"

fdelamo 07-06-2007 15:27:44

Faltan datos
 
El error da porque falta algún registro en DEPARTAMENTOS (o en clientes está mal).

Los datos que están mal son:

Código SQL [-]
select cl_DEPTO from clientes 
left join DEPARTAMENTOS on (clientes.cl_DEPTO = DEPARTAMENTOS.CODIGO)
WHERE DEPARTAMENTOS.CODIGO IS NULL

ebeltete 07-06-2007 16:16:54

Sabes que reinicie el Firebird y funciono perfectamente, no se cual es el problema pero me ha pasado en otras oportunidades.
No se si debo preguntar en este hilo pero al crear esta referencia en las tablas, cuando borro un registro en la tabla departamentos con una referencia en la tabla clientes, no me muestra ningun error y lo borraç, pero cuando cierroo y abro nuevamente la aplicacion, el registro aparece, o sea que en definitiva no lo borra de la bbdd, como hago para que me muestre un mensaje de que ese registro tiene referencias en algun cliente? Lo hago con una consulta sql antes de borrar o mediante cascade o no action hay alguna manera que la firebird me lo impida respondiendome con un error

fdelamo 08-06-2007 09:20:12

Creo que deberías quitar el "ON DELETE NO ACTION", si lo pones, el valor de la tabla CLIENTES no se altera, y tendrán un valor no válido. Si no lo pones, no te dejará borrar de la tabla DEPARTAMENTOS, produciéndose un error.

Lepe 08-06-2007 11:26:09

ON DELETE NO ACTION es la opción por defecto, (al menos en FB 1.5), si no se especifica otra.

Ahora mismo FB debería lanzar una excepción del tipo "Violation of constraint xxxxx" ya que no permite inconsistencias en la base de datos, es decir, no permite borrar un departamento si tiene un cliente.

El hecho de no mostrar ningún error, quizás sea por otra causa. Yo al menos, si obtengo los mensajes de error, especificando en los parámetros (Params) del objeto Transaction:

Código:

      isc_tpb_read_committed
      isc_tpb_rec_version
      isc_tpb_nowait

No uso commitRetaining, solo commit.

Saludos


La franja horaria es GMT +2. Ahora son las 03:23:42.

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