Foro de la Comunidad SIU

SIU-Guaraní => Informix => Mensaje iniciado por: folmedo en Abril 24, 2019, 04:29:20 pm

Título: error (-692)
Publicado por: folmedo en Abril 24, 2019, 04:29:20 pm
Estimados consulto ¿se podria cambiar o actualizar el codigo de un libro mal cargado?Pues lo intente desde la bace de datos y me da ese error .SALUDOS CORDIALES
Título: Re:error (-692)
Publicado por: Ignacio Bisso en Abril 24, 2019, 04:41:41 pm
Hola Federico,

Podrias poner aqui como intentaste cambiarlo y el mensaje de error
saludos
ignacio
Título: Re:error (-692)
Publicado por: Alejandro Delú en Abril 24, 2019, 04:52:50 pm
Si, el tema que ese dato se encuentra en otras tablas que tienen foreign key con esa tabla y por eso no te deja cambiarlo.
¿Es un libro de actas de examen?

Se puede, hay que abrir una transaccion, desahbilitar los constraints de foreign key, cambiar ese dato en todas la tablas donde se encuentre esa columna de libro de actas y cerrar la transaccion, algo asi:

Código: [Seleccionar]
BEGIN WORK;
SET CONTRAINTS ALL DEFERRED;  -- Hace que no valide las fk cuando cambies el valor en la tabla de libros de actas
UPDATE sga_libros_de_acta SET libro = xxxx WHERE libro = yyyy;
UPDATE sga_actas_examen  SET libro = xxxx WHERE libro = yyyy;
UPDATE sga_actas_promo  SET libro = xxxx WHERE libro = yyyy;
COMMIT WORK;

-------------------------------------------------------------------------------------------
Para poder saber que tablas hacen referencia (por medio de una foreign key) a la tabla "sga_libros_de_actas" debes correr la siguiente consulta:
Código: [Seleccionar]
  SELECT st.tabname,
         informix.sysreferences.ptabid,
         informix.sysreferences.delrule,
         informix.systables.tabname,   
         informix.systables.tabid,   
         informix.sysconstraints.constrid,   
         informix.sysconstraints.constrname,   
         informix.sysconstraints.constrtype,   
         informix.sysconstraints.idxname,   
         informix.sysindexes.idxtype, 
         informix.sysreferences.primary 
    FROM informix.sysconstraints,   
         informix.systables,   
         informix.sysindexes, 
         informix.sysreferences,
         informix.systables st   
   WHERE ( informix.systables.tabid = informix.sysconstraints.tabid ) and 
         ( informix.sysconstraints.idxname = informix.sysindexes.idxname ) and 
         ( informix.sysconstraints.constrtype = 'R') and 
         ( informix.sysconstraints.constrid = informix.sysreferences.constrid ) and 
         ( informix.sysreferences.ptabid = st.tabid ) and 
         ( informix.systables.tabid >= 100 ) and st.tabname = 'sga_libros_de_acta'