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 al crear Primary Key (https://www.clubdelphi.com/foros/showthread.php?t=68778)

Chogo 06-07-2010 19:19:33

Error al crear Primary Key
 
Hola y gracias por ver mi mensaje.


Quiero hacer una llave primaria y aqui esta la sentencia que uso


Código SQL [-]ALTER TABLE DETALLE_PLANILLA ADD CONSTRAINT PK_DETALLE_PLANILLA PRIMARY KEY (ID_REG)


pero me genera el siguiente error

Código SQL [-]ISC ERROR MESSAGE: attempt to store duplicate value (visible to active transactions) in unique index "PK_DETALLE_PLANILLA"

Chogo 06-07-2010 19:30:01

Estas son la sentencias SQL

Código SQL [-]

CREATE TABLE DETALLE_PLANILLA 
(
  ID_REG                          BIGINT         DEFAULT 0 NOT NULL,
  ID_PLANILLA                    INTEGER         NOT NULL,
  CODEMPLEADO                    INTEGER         DEFAULT 0 NOT NULL,
  IDENTIDAD                      VARCHAR(    20)  COLLATE NONE,
  PROMEDIO_SEMANA                NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  HORAS_NOR                      NUMERIC(  3, 2) DEFAULT 0 NOT NULL,
  TOTAL_VALOR_NOR                NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  HORAS_EXT1                     NUMERIC(  3, 2) DEFAULT 0 NOT NULL,
  HORAS_EXT2                     NUMERIC(  3, 2) DEFAULT 0 NOT NULL,
  HORAS_EXT3                     NUMERIC(  3, 2) DEFAULT 0 NOT NULL,
  VALOR_EXT1                     NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  VALOR_EXT2                     NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  VALOR_EXT3                     NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  TOTAL_VALOR_EXT                NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  FERIADO                        NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  AJUSTE                         NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  BONO                           NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  SABADO                         NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  DOMINGO                        NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  BRUTO                          NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  IHSS                           NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  ISR                            NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  TOTAL_DEDUC                    NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  PAGO_NETO                      NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  PAGO_NETO_REDONDO              NUMERIC( 12, 2) DEFAULT 0 NOT NULL,
  IDLINEA                        INTEGER         NOT NULL,
  IHSS_EMP                       NUMERIC( 12, 2) DEFAULT 0.0 NOT NULL,
 CONSTRAINT PK_DETALLE_PLANILLA PRIMARY KEY (ID_REG)
);

ALTER TABLE DETALLE_PLANILLA ADD CONSTRAINT FK_DETALLE_PLANILLA 
  FOREIGN KEY (ID_PLANILLA) REFERENCES MAESTRO_PLANILLA
  (ID_PLANILLA) 
  ON DELETE NO ACTION
  ON UPDATE CASCADE
;

ALTER TABLE DETALLE_PLANILLA ADD CONSTRAINT FK_DETALLE_PLANILLA1 
  FOREIGN KEY (IDLINEA) REFERENCES LINEA
  (IDLINEA) 
  ON DELETE NO ACTION
  ON UPDATE CASCADE
;

ALTER TABLE DETALLE_PLANILLA ADD CONSTRAINT FK_DETALLE_PLANIL_EMPLEADOS 
  FOREIGN KEY (CODEMPLEADO) REFERENCES EMPLEADOS
  (CODEMPLEADO) 
  ON DELETE NO ACTION
  ON UPDATE CASCADE
;

CREATE ASC INDEX IDX_CODEMPLEADO ON DETALLE_PLANILLA (CODEMPLEADO);

CREATE ASC INDEX IDX_IDENTIDAD ON DETALLE_PLANILLA (IDENTIDAD);

Casimiro Notevi 06-07-2010 19:30:49

Cita:

Empezado por Chogo (Mensaje 369414)
[..] ISC ERROR MESSAGE: attempt to store duplicate value (visible to active transactions) in unique index "PK_DETALLE_PLANILLA" [..]

Pues eso, que ya existe un índice para ese campo, así que puedes hacer varias cosas, lo más simple (si usas ibexpert, por ejemplo) es eliminar el índice y luego crear la primary key. Al crear la primary key ya se creará automáticamente el índice por ese campo.

Chogo 06-07-2010 20:00:04

borre el campo y lo volvi agregar
Pero al hacer llave primaria me sale este error

Código SQL [-]
object columns are constrained- no 2 table rows can have duplicate column values.

attemp to store duplicate value(Visible to active transactions) in unique index "RDB$primary53"

Al González 06-07-2010 20:04:16

Casimiro, ¿no será más bien que el campo ID_REG tiene valores duplicados en los registros actuales de la tabla? :)

Casimiro Notevi 06-07-2010 20:04:30

Cita:

Empezado por Chogo (Mensaje 369424)
borre el campo y lo volvi agregar
Pero al hacer llave primaria me sale este error

No, borrar el campo, no. Borrar el índice :confused:

Chogo 06-07-2010 20:04:49

Ya borre todos los registros

Casimiro Notevi 06-07-2010 20:06:53

Cita:

Empezado por Al González (Mensaje 369425)
Casimiro, ¿no será más bien que el campo ID_REG tiene valores duplicados en los registros actuales de la tabla? :)

Sí, más bien eso. Había entendido que el error era al crear la clave porque existía el índice. Pero obviamente, si tiene valores repetidos entonces no podrá crearlo como quiere.

Casimiro Notevi 06-07-2010 20:07:25

Cita:

Empezado por Chogo (Mensaje 369427)
Ya borre todos los registros

:confused: supongo que no te servían para nada :confused: :D:D:D

Chogo 06-07-2010 20:09:47

Esto es lo que tengo
Código SQL [-]
CREATE TABLE DETALLE_PLANILLA 
(   ID_PLANILLA INTEGER NOT NULL,   
CODEMPLEADO INTEGER DEFAULT 0 NOT NULL,   
IDENTIDAD VARCHAR(20) CHARACTER SET NONE COLLATE NONE,   
PROMEDIO_SEMANA NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
HORAS_NOR NUMERIC(3, 2) DEFAULT 0 NOT NULL,   
TOTAL_VALOR_NOR NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
HORAS_EXT1 NUMERIC(3, 2) DEFAULT 0 NOT NULL,   
HORAS_EXT2 NUMERIC(3, 2) DEFAULT 0 NOT NULL,   
HORAS_EXT3 NUMERIC(3, 2) DEFAULT 0 NOT NULL,   
VALOR_EXT1 NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
VALOR_EXT2 NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
VALOR_EXT3 NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
TOTAL_VALOR_EXT NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
FERIADO NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
AJUSTE NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
BONO NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
SABADO NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
DOMINGO NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
BRUTO NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
IHSS NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
ISR NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
TOTAL_DEDUC NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
PAGO_NETO NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
PAGO_NETO_REDONDO NUMERIC(12, 2) DEFAULT 0 NOT NULL,   
IDLINEA INTEGER NOT NULL,   IHSS_EMP NUMERIC(12, 2) DEFAULT 0.0 NOT NULL,   
ID_REG BIGINT DEFAULT 0 NOT NULL);   

ALTER TABLE DETALLE_PLANILLA ADD CONSTRAINT FK_DETALLE_PLANILLA FOREIGN KEY (ID_PLANILLA) REFERENCES MAESTRO_PLANILLA(ID_PLANILLA) ON UPDATE CASCADE;  

ALTER TABLE DETALLE_PLANILLA ADD CONSTRAINT FK_DETALLE_PLANILLA1 FOREIGN KEY (IDLINEA) REFERENCES LINEA(IDLINEA) ON UPDATE CASCADE;  ALTER TABLE 

DETALLE_PLANILLA ADD CONSTRAINT FK_DETALLE_PLANIL_EMPLEADOS FOREIGN KEY (CODEMPLEADO) REFERENCES EMPLEADOS(CODEMPLEADO) ON UPDATE CASCADE;  

CREATE INDEX IDX_CODEMPLEADO ON DETALLE_PLANILLA(CODEMPLEADO);  

CREATE INDEX IDX_IDENTIDAD ON DETALLE_PLANILLA(IDENTIDAD);

Chogo 06-07-2010 20:14:21

La tabla es nueva. estoy en desarrollo.

Casimiro Notevi 06-07-2010 20:15:21

Si lo que quieres es crear una clave primaria, aquí tienes un simple ejemplo:

Código SQL [-]
create table  tbPAISES 
( 
  ID          domCodigoNoNulo, 
  Nombre      domNombre, 
  primary key (ID) 
);


Chogo 06-07-2010 20:20:39

¿Tengo que elimnar la tabla y volver a hacerla?
El problema que tengo es ya tengo store procedure y trigger funcionando con esa tabla.

Casimiro Notevi 06-07-2010 22:10:27

Con cualquier manejador de base de datos: ibexpert, flamerobin, marathon, etc. puedes extraer la estructura de la base de datos (y los datos), puedes modificarla a tu gusto y volver a crear la base con la nueva estructura.

Chogo 06-07-2010 23:08:08

Intente eliminar la tabla y no pude, me decia que estaba ocupada por otra transaccion. asi que apague el servidor(Reinicie la pc , no se como hacerlo de otra manera) y pude hacer la primary key.

al parecer habia transacciones en el limbo, no se como eliminar esas transaciones y lo unico que puedo hacer es apagar el server.

¿Como puedo resolver esos problemas en el futuro?

Casimiro Notevi 06-07-2010 23:18:32

No son transacciones en el limbo, son transacciones sin confirmar, eso depende del programa que accede a la base de datos. Revísalo para hacer commit (o rollback) de las transacciones. Que no se queden en espera.

look 06-07-2010 23:38:06

Cita:

Empezado por Chogo (Mensaje 369456)
Intente eliminar la tabla y no pude, me decia que estaba ocupada por otra transaccion. asi que apague el servidor(Reinicie la pc , no se como hacerlo de otra manera) y pude hacer la primary key.

al parecer habia transacciones en el limbo, no se como eliminar esas transaciones y lo unico que puedo hacer es apagar el server.

¿Como puedo resolver esos problemas en el futuro?

¿apagar el servidor?, no es mas facil detener y volver a iniciar el servicio del motor, el que esta en el panel de control, creo que eso puede funcionar.

Chogo 07-07-2010 16:22:28

Cita:

Empezado por Casimiro Notevi (Mensaje 369457)
No son transacciones en el limbo, son transacciones sin confirmar, eso depende del programa que accede a la base de datos. Revísalo para hacer commit (o rollback) de las transacciones. Que no se queden en espera.

Esta transacciones sin confirmar, tienen algun id?,¿ como les envio un commit o rollback? . por que ya me ah pasado que me salgo de la aplicacion cliente. aun estan esas transacciones cuasandome problemas. no se como firmarlas o cancelarlas.

Casimiro Notevi 07-07-2010 17:17:24

Al salir del programa puedes poner una orden del tipo:

Código:

if ibtransaction.intransaction then
  ibtransaction.rollback;



La franja horaria es GMT +2. Ahora son las 12:41:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi