Pregunta Eliminar registro

  • miércoles, 18 de julio de 2012 2:33
     
     
    Hola una consulta cuando elimino un registro me sale este error, error -2147217900 cannot delete last usuarios because areas exists, pero cuando ingreso otro registro a la tabla y lo elimino no sale ningun error, a que se debe esto

    Pedro Avila


    • Editado Pedro Avila miércoles, 18 de julio de 2012 2:34 x
    •  

Todas las respuestas

  • miércoles, 18 de julio de 2012 7:01
     
     

    Tendría que ver el diseño de la base de datos, pero supongo que se debe a que el registro que te da error al eliminar tiene un registro relacionado en otra tabla.


    Saludos, Javier J

  • miércoles, 18 de julio de 2012 12:42
     
     


    Pedro Avila

    Hola Javier, esta es la relación de la db tengo 2 registros en la tabla Usuarios los 2 primeros no lo puedo eliminar pero si ingreso un 4 cuarto registro el cuarto registro si lo puedo eliminar a que se debe

    • Editado Pedro Avila miércoles, 18 de julio de 2012 12:50 faltaban datos
    •  
  • miércoles, 18 de julio de 2012 12:51
     
     
    Te mando la imagen del selec a la tabla usuario es en esa tabla donde hago el delete y me sale error.

    Pedro Avila

  • miércoles, 18 de julio de 2012 14:52
     
     

    Debe estar activada la integridad referencial, la que no permite eliminar un registro si tiene registros asociados en otra tabla (tal cual lo que expresa el Sr Javier Jimenez).

    En este caso debes primero eliminar los datos asociados al registro ppal que deseas eliminar

  • miércoles, 18 de julio de 2012 14:57
     
     

    recién e credo la db con Erwin y me parece que es un tiger lo puedo eliminar que me aconsejas.

    ALTER TRIGGER [dbo].[tD_Areas] ON [dbo].[Areas] FOR DELETE AS
    /* ERwin Builtin Trigger */
    /* DELETE trigger on Areas */
    BEGIN
      DECLARE  @errno   int,
               @errmsg  varchar(255)
        /* ERwin Builtin Trigger */
        /* Areas  Usuarios on parent delete no action */
        /* ERWIN_RELATION:CHECKSUM="0000ef29", PARENT_OWNER="", PARENT_TABLE="Areas"
        CHILD_OWNER="", CHILD_TABLE="Usuarios"
        P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
        FK_CONSTRAINT="R_6", FK_COLUMNS="areCodigo" */
        IF EXISTS (
          SELECT * FROM deleted,Usuarios
          WHERE
            /*  %JoinFKPK(Usuarios,deleted," = "," AND") */
            Usuarios.areCodigo = deleted.areCodigo
        )
        BEGIN
          SELECT @errno  = 30001,
                 @errmsg = 'Cannot delete Areas because Usuarios exists.'
          GOTO ERROR
        END


        /* ERwin Builtin Trigger */
        RETURN
    ERROR:
        raiserror @errno @errmsg
        rollback transaction
    END

    o puede ser este:

    ALTER TRIGGER [dbo].[tD_Usuarios] ON [dbo].[Usuarios] FOR DELETE AS
    /* ERwin Builtin Trigger */
    /* DELETE trigger on Usuarios */
    BEGIN
      DECLARE  @errno   int,
               @errmsg  varchar(255)
        /* ERwin Builtin Trigger */
        /* Usuarios  RecepcionEquipos on parent delete no action */
        /* ERWIN_RELATION:CHECKSUM="00057f26", PARENT_OWNER="", PARENT_TABLE="Usuarios"
        CHILD_OWNER="", CHILD_TABLE="RecepcionEquipos"
        P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
        FK_CONSTRAINT="R_9", FK_COLUMNS="usuCodigo" */
        IF EXISTS (
          SELECT * FROM deleted,RecepcionEquipos
          WHERE
            /*  %JoinFKPK(RecepcionEquipos,deleted," = "," AND") */
            RecepcionEquipos.usuCodigo = deleted.usuCodigo
        )
        BEGIN
          SELECT @errno  = 30001,
                 @errmsg = 'Cannot delete Usuarios because RecepcionEquipos exists.'
          GOTO ERROR
        END

        /* ERwin Builtin Trigger */
        /* Areas  Usuarios on child delete no action */
        /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Areas"
        CHILD_OWNER="", CHILD_TABLE="Usuarios"
        P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
        FK_CONSTRAINT="R_6", FK_COLUMNS="areCodigo" */
        IF EXISTS (SELECT * FROM deleted,Areas
          WHERE
            /* %JoinFKPK(deleted,Areas," = "," AND") */
            deleted.areCodigo = Areas.areCodigo AND
            NOT EXISTS (
              SELECT * FROM Usuarios
              WHERE
                /* %JoinFKPK(Usuarios,Areas," = "," AND") */
                Usuarios.areCodigo = Areas.areCodigo
            )
        )
        BEGIN
          SELECT @errno  = 30010,
                 @errmsg = 'Cannot delete last Usuarios because Areas exists.'
          GOTO ERROR
        END

        /* ERwin Builtin Trigger */
        /* Perfiles  Usuarios on child delete no action */
        /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Perfiles"
        CHILD_OWNER="", CHILD_TABLE="Usuarios"
        P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
        FK_CONSTRAINT="R_7", FK_COLUMNS="perCodigo" */
        IF EXISTS (SELECT * FROM deleted,Perfiles
          WHERE
            /* %JoinFKPK(deleted,Perfiles," = "," AND") */
            deleted.perCodigo = Perfiles.perCodigo AND
            NOT EXISTS (
              SELECT * FROM Usuarios
              WHERE
                /* %JoinFKPK(Usuarios,Perfiles," = "," AND") */
                Usuarios.perCodigo = Perfiles.perCodigo
            )
        )
        BEGIN
          SELECT @errno  = 30010,
                 @errmsg = 'Cannot delete last Usuarios because Perfiles exists.'
          GOTO ERROR
        END

        /* ERwin Builtin Trigger */
        /* NivelUsuario  Usuarios on child delete no action */
        /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="NivelUsuario"
        CHILD_OWNER="", CHILD_TABLE="Usuarios"
        P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
        FK_CONSTRAINT="R_8", FK_COLUMNS="nivCodigo" */
        IF EXISTS (SELECT * FROM deleted,NivelUsuario
          WHERE
            /* %JoinFKPK(deleted,NivelUsuario," = "," AND") */
            deleted.nivCodigo = NivelUsuario.nivCodigo AND
            NOT EXISTS (
              SELECT * FROM Usuarios
              WHERE
                /* %JoinFKPK(Usuarios,NivelUsuario," = "," AND") */
                Usuarios.nivCodigo = NivelUsuario.nivCodigo
            )
        )
        BEGIN
          SELECT @errno  = 30010,
                 @errmsg = 'Cannot delete last Usuarios because NivelUsuario exists.'
          GOTO ERROR
        END

        /* ERwin Builtin Trigger */
        /* Estado  Usuarios on child delete no action */
        /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Estado"
        CHILD_OWNER="", CHILD_TABLE="Usuarios"
        P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
        FK_CONSTRAINT="R_10", FK_COLUMNS="estCodigo" */
        IF EXISTS (SELECT * FROM deleted,Estado
          WHERE
            /* %JoinFKPK(deleted,Estado," = "," AND") */
            deleted.estCodigo = Estado.estCodigo AND
            NOT EXISTS (
              SELECT * FROM Usuarios
              WHERE
                /* %JoinFKPK(Usuarios,Estado," = "," AND") */
                Usuarios.estCodigo = Estado.estCodigo
            )
        )
        BEGIN
          SELECT @errno  = 30010,
                 @errmsg = 'Cannot delete last Usuarios because Estado exists.'
          GOTO ERROR
        END


        /* ERwin Builtin Trigger */
        RETURN
    ERROR:
        raiserror @errno @errmsg
        rollback transaction
    END


    Pedro Avila

  • viernes, 20 de julio de 2012 6:17
     
     
    Efectivamente, lop que ocurre es que las tablas tienen  relaciones de integridad entre ellas.
    Antes de eliminar un registro de, por ejemplo, usuarios tienes que comprobar que no tenga ningún registro asociado en areas. Si lo tiene, debes eliminarlo previamente.

    Saludos, Javier J