PDA

Ver la Versión Completa : Error Violation Primary Key


maui
06-05-2004, 23:04:09
HOLA A TODOS

HICE UN MANTENEDOR DE CLIENTES CON UN PROCEDIMIENTO ALMACENADO QUE INSERTA ESTOS DATOS A LA TABLA CLIENTE, LUEGO DE INGRESAR ESTOS DATOS HAGO CLICK EN EL BOTON GUARDAR Y ME SALE EL ERROR:

"violation primary key o unique key integ_838 en la tabla cliente".

Y ESTE ES EL CODIGO QUE ESTOY UTILIZANDO EN DELPHI 6.0.

FrmManclientes.StoredProc.Params[0].AsString:= Edit1.Text;
FrmManclientes.StoredProc.Params[1].AsString:= Edit2.Text;
FrmManclientes.StoredProc.Params[2].AsString:= Edit3.Text;
FrmManclientes.StoredProc.Params[3].AsString:= Edit4.Text;
FrmManclientes.StoredProc.Params[4].AsString:= Edit5.Text;
FrmManclientes.StoredProc.Params[5].AsString:= Edit6.Text;
FrmManclientes.StoredProc.Params[6].AsString:= Edit7.Text;
FrmManclientes.StoredProc.Params[7].AsString:= Edit8.Text;
FrmManclientes.StoredProc.Params[8].AsString:= Edit9.Text;
FrmManclientes.StoredProc.Params[9].AsString:= Edit10.Text;
FrmManclientes.StoredProc.Params[10].AsString:= Edit11.Text;
FrmManclientes.StoredProc.Params[11].AsString:= Edit12.Text;
FrmManclientes.StoredProc.Params[12].AsString:= Edit13.Text;
FrmManclientes.StoredProc.Params[13].AsString:= Edit14.Text;
FrmManclientes.StoredProc.Params[14].AsString:= Edit15.Text;
FrmManclientes.StoredProc.Params[15].AsString:= Edit16.Text;
FrmManclientes.StoredProc.ExecProc;


Por favor necesito una respuesta lo antes posible.....

SALUDOS

MAUI

eduarcol
06-05-2004, 23:07:03
Violation Primary Key = Registro Duplicado

Saca tus conlusiones ;)

delphi.com.ar
06-05-2004, 23:07:53
Primero, es fundamental para participar en los foros leer la Guía de Estilo (http://www.clubdelphi.com/users/llsoft/Docs/GuiaEstilo.php).

Despues de leer esto, te darás que los datos de tu pregunta, no son suficientes como para poder saber cual es el problema.

¿Sabes lo que es una violación a una clave primaria?

maui
06-05-2004, 23:20:23
no creo que tenga el rut duplicado es la tabla hecha en interbase 6.0:

create table CLIENTE
(
RUT_CLIENTE CHAR(10) NOT NULL,
PRIMER_NOMBRE VARCHAR(15) NOT NULL,
SEGUNDO_NOMBRE VARCHAR(15) NOT NULL,
PRIMER_APELLIDO VARCHAR(15) NOT NULL,
SEGUNDO_APELLIDO VARCHAR(15) NOT NULL,
DIRECCION_POBLACION VARCHAR(20) NOT NULL,
DIRECCION_CALLE VARCHAR(20) NOT NULL,
DIRECCION_NUMERO VARCHAR(10) NOT NULL,
DIRECCION_DPTO VARCHAR(10) NOT NULL,
DIRECCION_COMUNA VARCHAR(15) NOT NULL,
DIRECCION_CIUDAD VARCHAR(15) NOT NULL,
GIRO VARCHAR(15) NOT NULL,
TELEFONO_FIJO VARCHAR(20) NOT NULL,
TELEFONO_CELULAR VARCHAR(20) NOT NULL,
E_MAIL VARCHAR(50) NOT NULL,
FECHA_INGRESO CHAR(10) NOT NULL,
PRIMARY KEY (RUT_CLIENTE)
);

lo otro averigue que podia ser que me falte una libreria.....

por favor espero tu respuesta amigo.

maui
06-05-2004, 23:22:05
hola amigo

gracias por advertirme.

saludos y si me puedes ayudar buena onda.

sanxpue
06-05-2004, 23:36:54
No te falta ninguna libreria...
por que no pones tu procedimiento almacenado..tal vez ahi este la situacion, por que nada mas pones la creacion de tu tabla y como pasas los parametros pero nunca pones como los insertas :confused:

eduarcol
06-05-2004, 23:37:44
HOLA A TODOS

HICE UN MANTENEDOR DE CLIENTES CON UN PROCEDIMIENTO ALMACENADO QUE INSERTA ESTOS DATOS A LA TABLA CLIENTE, LUEGO DE INGRESAR ESTOS DATOS HAGO CLICK EN EL BOTON GUARDAR Y ME SALE EL ERROR:

"violation primary key o unique key integ_838 en la tabla cliente".



Pues estas seguro que no serepite el RUT porq si le pasas uno cuando ya existe en la tabla el error que te da es ese

delphi.com.ar
06-05-2004, 23:53:57
Lo importante es saber que es lo que estas ejecutando, sin lugar a dudas ese proceso esta intentando insertar un registro o modificando una clave principal que produce una violación de clave primaria.

Saludos!

maui
07-05-2004, 00:22:13
hola amigo aca esta el procedimiento almacenado Y ASI ME COMPILO:
SET TERM !!
CREATE PROCEDURE ADD_CLIENT_INFO
(
RUT_CLIENTE CHAR(10),
PRIMER_NOMBRE VARCHAR(20),
SEGUNDO_NOMBRE VARCHAR(20),
PRIMER_APELLIDO VARCHAR(20),
SEGUNDO_APELLIDO VARCHAR(20),
DIRECCION_POBLACION VARCHAR(15),
DIRECCION_CALLE VARCHAR(10),
DIRECCION_NUMERO VARCHAR(10),
DIRECCION_DPTO VARCHAR(15),
DIRECCION_CIUDAD VARCHAR(15),
DIRECCION_COMUNA VARCHAR(15),
GIRO VARCHAR(15),
TELEFONO_FIJO VARCHAR(20),
TELEFONO_CELULAR VARCHAR(20),
E_MAIL VARCHAR(50),
FECHA_INGRESO CHAR(10)
)
AS
BEGIN
INSERT INTO CLIENTE
( RUT_CLIENTE,
PRIMER_NOMBRE,
SEGUNDO_NOMBRE,
PRIMER_APELLIDO,
SEGUNDO_APELLIDO,
DIRECCION_POBLACION,
DIRECCION_CALLE,
DIRECCION_NUMERO,
DIRECCION_DPTO,
DIRECCION_CIUDAD,
DIRECCION_COMUNA,
GIRO,
TELEFONO_FIJO,
TELEFONO_CELULAR,
E_MAIL,
FECHA_INGRESO)
VALUES(:RUT_CLIENTE,
:PRIMER_NOMBRE,
:SEGUNDO_NOMBRE,
:PRIMER_APELLIDO,
:SEGUNDO_APELLIDO,
:DIRECCION_POBLACION,
:DIRECCION_CALLE,
:DIRECCION_NUMERO,
:DIRECCION_DPTO,
:DIRECCION_CIUDAD,
:DIRECCION_COMUNA,
:GIRO,
:TELEFONO_FIJO,
:TELEFONO_CELULAR,
:E_MAIL,
:FECHA_INGRESO );
END;
!!
SET TERM;

y esta es la tabla:

CREATE TABLE CLIENTE
(
RUT_CLIENTE CHAR(10) NOT NULL,
PRIMER_NOMBRE VARCHAR(15) NOT NULL,
SEGUNDO_NOMBRE VARCHAR(15) NOT NULL,
PRIMER_APELLIDO VARCHAR(15) NOT NULL,
SEGUNDO_APELLIDO VARCHAR(15) NOT NULL,
DIRECCION_POBLACION VARCHAR(20) NOT NULL,
DIRECCION_CALLE VARCHAR(20) NOT NULL,
DIRECCION_NUMERO VARCHAR(10) NOT NULL,
DIRECCION_DPTO VARCHAR(10) NOT NULL,
DIRECCION_COMUNA VARCHAR(15) NOT NULL,
DIRECCION_CIUDAD VARCHAR(15) NOT NULL,
GIRO VARCHAR(15) NOT NULL,
TELEFONO_FIJO VARCHAR(20) NOT NULL,
TELEFONO_CELULAR VARCHAR(20) NOT NULL,
E_MAIL VARCHAR(50) NOT NULL,
FECHA_INGRESO CHAR(10),
PRIMARY KEY (RUT_CLIENTE)
);

si me falta una libreria cuales serian?

espero sus comentarios.......

eduarcol
07-05-2004, 00:31:05
Para comenzar
si me falta una libreria cuales serian?

espero sus comentarios.......

Esta es la repuesta
No te falta ninguna libreria...


El error no esta en el procedimientoalmacenado el asunto es que duplica la clave primaria, busca elnumerode rut que quieres ingresar y veras que ya existe

sanxpue
07-05-2004, 02:21:22
Como dice EduarCol..

Checate se me hace que andas pasando una clave primaria repetida y si dices que no entonces has las siguiente pruebas...

Primero cambia el char por varchar en tu indice primario por que no le veo nada de malo a tu SP o si no entonces
create otra tabla, crea un generador y su trigger despues de insertar que le asigne un valor, y si te truena entonces si es el motor.. aunque lo dudo asi de mucho...

maui
07-05-2004, 17:03:54
hola amigo sanxpue

tenias razon se estan duplicando los datos, y no es solamente la primary key sino todas, te cuento.... hago click una vez en el boton guardar y me guarda los datos en la tabla en blanco y luego cuando hago click la segunda vez me sale el error y me ingresa los datos.

la cosa es que no entiendo como puedo eliminar ese error, ya que he revizado por cielo, mar y tierra y no he encontrado nada.

lo otro en el formulario estoy ocupando groupbox y edit.

que podra ser?

espero tus comentarios...

y gracias por ayudarme......

delphi.com.ar
07-05-2004, 17:26:54
Si insertas un nuevo cliente, este si o si tiene que tener otro ID..

seken
11-05-2004, 00:11:46
estimados....
ya qu estan tratando el tema de insertar un nuevo registro, me gustraía saber si hay una fucioón que me agrege un reguistro igual al que estoy seleccionando en una tabla. En dicha tabla tengo un campo llamado "codigointerno" que es Autoincrementable (+). ¿existe dicha fucnión?
muchas gracias

;)

delphi.com.ar
11-05-2004, 02:57:59
Puedes hacer un insert de un select:INSERT INTO TABLA (DESCRIPCION, IMPORTE)
SELECT DESCRIPCION, IMPORTE
WHERE ID = :IdRegAnt

seken
11-05-2004, 13:40:50
gracias por la respuesta, pero me gustaria saber como puedo copiar un registro de una tabla a otra que tenga la misma estructura. Porque tengo una tabla con 85 atributos, y quiero copiar rapidamnete un regiustro. Ademas tengo otras 5 tablas que tienen que hacer lo mismo.

una duda, si armo un SQL como el que me pasas, con solo Ejecutarlo ya me inserta el registro???
saludos y disculpa por mi ignorancia de principiante

delphi.com.ar
11-05-2004, 15:49:46
El INSERT te insertará los registros que retorne el SELECT, puede ser uno, ninguno o N...
Te recomiendo buscar algún manual de SQL, ya que se trata de una herramienta terriblemente útil y sencilla.

Saludos!