PDA

Ver la Versión Completa : Key Violation


Alsaca
15-05-2008, 20:52:49
Buenas tardes a todos/as, os cuento mi problema...

Al pulsar el botón de editar, donde sólo edito la tabla y acontinuación pulso el botón de grabar, me da un key violation, que me está dando dolores de cabeza... alguién que me pueda ayudar.



Salu2.

Delphius
15-05-2008, 21:16:24
Hola Alsaca,
¿Podrías ser más detallado/a?
Ese error puede ser porque ya existe esa clave, o porque no se añadió la clave... o porque Saturno está en fase con la Tierra.

Pueden ser muchas las causas. Sin mayores detalles por tu parte no te sabríamos decir como ayudarte.
Espero que comprendas que es necesario que nos indiques tu base de datos, componentes que empleas, y un poco del código que utilizas. A ciegas, lo único que podemos hacer es estar adivinando.
Lo malento si te molesta, pero es que mi bola de cristal me está fallando.

Saludos,

jcarteagaf
15-05-2008, 21:21:17
Evidentemente el error Key Violation te indica que se esta intentando duplicar la llave primaria de tu archivo (tabla) como te dice el amigo Delphius deberias dar mas datos:

Que tipo de base de datos usas (sql, interbase, oracle,etc)
Que tipo de dataset usas (TQuery, TTable, TAdotable, etc)
algun ejemplo de tu codigo

Con esa información adicional veras que pronto saltaran las respuestas que te ayudaran a resolver tu problema.

Saludos

P.D.

A ciegas, lo único que podemos hacer es estar adivinando.
Lo malento si te molesta, pero es que mi bola de cristal me está fallando.

Pues como dice mi jefe cuando no puede adivinar algo

Yo tengo 2 pero no son de cristal....:)

Alsaca
15-05-2008, 21:36:22
Perdonad, por explicarlo tan básicamente....

Tabla Paradox. Clave principal Cod_cli

Botón Editar

tclient.edit;
altacli.Enabled:=false;
bitbtn13.Enabled:=false;
bitbtn14.enabled:=false;
dbedit2.Enabled:=true;
dbedit3.Enabled:=true;
dbedit4.Enabled:=true;
dbedit5.Enabled:=true;
dbedit6.Enabled:=true;
dbedit7.Enabled:=true;
dbedit8.Enabled:=true;
dbedit9.Enabled:=true;
dbedit10.Enabled:=true;
dbedit15.Enabled:=true;
dbedit18.Enabled:=true;
dbedit13.Enabled:=true;
Date1.enabled:=true;
Date2.enabled:=true;
Date3.enabled:=true;
Date4.enabled:=true;
dbedit16.enabled:=true;
dbedit17.Enabled:=true;
bitbtn4.Enabled:=true;
bitbtn5.Enabled:=false;
bitbtn6.Enabled:=false;
dbedit14.Enabled:=true;
date5.Enabled:=true;
date6.enabled:=true;
dbedit19.Visible:=false;
dbedit20.Visible:=false;
dbedit21.Visible:=false;
dbedit22.Visible:=false;
dbedit23.Visible:=false;
dbedit24.Visible:=false;
bitbtn4.Enabled:=true;

Botón grabar

tclient.FieldByName('F_exp').asdatetime:=date1.Date;
tclient.FieldByName('F_cad').asdatetime:=date2.Date;
tclient.FieldByName('F_segexp').asdatetime:=date3.Date;
tclient.FieldByName('F_segcad').asdatetime:=date4.Date;
tclient.FieldByName('F_expe').AsDateTime:=date5.Date;
tclient.FieldByName('F_cade').asdatetime:=date6.date;
tclient.FieldByName('F_alta').AsDateTime:=date7.Date;
tclient.Post;
altacli.Enabled:=true;
date7.enabled:=false;
bitbtn4.enabled:=false;
date1.Enabled:=false;
date2.Enabled:=false;
date3.Enabled:=false;
date4.Enabled:=false;
dbedit1.Enabled:=false;
dbedit2.Enabled:=false;
dbedit3.Enabled:=false;
dbedit4.Enabled:=false;
dbedit5.Enabled:=false;
dbedit6.Enabled:=false;
dbedit7.Enabled:=false;
dbedit8.Enabled:=false;
dbedit9.Enabled:=false;
dbedit10.Enabled:=false;
dbedit13.Enabled:=false;
dbedit16.Enabled:=false;
dbedit17.Enabled:=false;
bitbtn5.enabled:=true;
bitbtn6.enabled:=true;
dbedit14.Enabled:=false;
date5.Enabled:=false;
date6.Enabled:=false;
dbedit15.Enabled:=false;
dbedit18.enabled:=false;
tclient.Close;

Botón Consulta

tclient.Close;
dbedit2.Text:='';
dbedit3.Text:='';
dbedit4.Text:='';
dbedit5.Text:='';
dbedit6.Text:='';
dbedit7.Text:='';
dbedit8.Text:='';
dbedit9.Text:='';
dbedit10.Text:='';
dbedit11.Text:='';
dbedit13.Text:='';
dbedit15.Text:='';
dbedit16.Text:='';
dbedit17.Text:='';
dbedit18.Text:='';
dbedit19.Text:='';
dbedit20.Text:='';
dbedit21.Text:='';
dbedit22.Text:='';
dbedit23.Text:='';
dbedit24.Text:='';
fbuscli:=tfbuscli.create(self);
fbuscli.tclient.active:=true;
fbuscli.showmodal;
tclient.Open;
tclient.edit;
tclient.FieldByName('Cod_cli').Asstring:=fbuscli.tclient.fieldbyname('Cod_cli').asstring;
tclient.FieldByName('f_alta').Asdatetime:=fbuscli.Tclient.fieldbyname('f_alta').Asdatetime;
tclient.FieldByName('nomb').AsString:=fbuscli.Tclient.fieldbyname('nomb').AsString;
tclient.FieldByName('apelli').AsString:=fbuscli.Tclient.fieldbyname('apelli').AsString;
tclient.FieldByName('direc').AsString:=fbuscli.Tclient.fieldbyname('direc').AsString;
tclient.FieldByName('local').AsString:=fbuscli.Tclient.fieldbyname('local').AsString;
tclient.FieldByName('provi').AsString:=fbuscli.Tclient.fieldbyname('provi').AsString;
tclient.FieldByName('cpostal').AsString:=fbuscli.Tclient.fieldbyname('cpostal').AsString;
tclient.FieldByName('dni').AsString:=fbuscli.Tclient.fieldbyname('dni').AsString;
tclient.FieldByName('telf').AsString:=fbuscli.Tclient.fieldbyname('telf').AsString;
tclient.FieldByName('movil').AsString:=fbuscli.Tclient.fieldbyname('movil').AsString;
tclient.FieldByName('n_permi').AsString:=fbuscli.Tclient.fieldbyname('n_permi').AsString;
tclient.FieldByName('f_exp').Asdatetime:=fbuscli.Tclient.fieldbyname('f_exp').Asdatetime;
tclient.FieldByName('f_cad').Asdatetime:=fbuscli.Tclient.fieldbyname('f_cad').Asdatetime;
tclient.FieldByName('tipo').AsString:=fbuscli.Tclient.fieldbyname('tipo').AsString;
tclient.FieldByName('nomb_seg').AsString:=fbuscli.Tclient.fieldbyname('nomb_seg').AsString;
tclient.FieldByName('n_segur').AsString:=fbuscli.Tclient.fieldbyname('n_segur').AsString;
tclient.FieldByName('f_segexp').Asdatetime:=fbuscli.Tclient.fieldbyname('f_segexp').Asdatetime;
tclient.FieldByName('f_segcad').Asdatetime:=fbuscli.Tclient.fieldbyname('f_segcad').Asdatetime;
tclient.FieldByName('n_pere').AsString:=fbuscli.Tclient.fieldbyname('n_pere').AsString;
tclient.FieldByName('f_expe').Asdatetime:=fbuscli.Tclient.fieldbyname('f_expe').Asdatetime;
tclient.FieldByName('f_cade').Asdatetime:=fbuscli.Tclient.fieldbyname('f_cade').Asdatetime;
tclient.FieldByName('tipo1').AsString:=fbuscli.Tclient.fieldbyname('tipo1').AsString;
altacli.Enabled:=false;
dbedit15.visible:=true;
dbedit18.Visible:=true;
date7.Visible:=false;
dbedit11.Enabled:=false;
dbedit11.visible:=true;
bitbtn1.Enabled:=true;
bitbtn3.Enabled:=true;
dbedit18.enabled:=false;
dbedit19.Visible:=true;
dbedit20.Visible:=true;
dbedit21.Visible:=true;
dbedit22.visible:=true;
dbedit23.Visible:=true;
dbedit24.Visible:=true;
dbedit19.enabled:=false;
dbedit20.enabled:=false;
dbedit21.enabled:=false;
dbedit22.enabled:=false;
dbedit23.enabled:=false;
dbedit24.enabled:=false;
borrar.Enabled:=true;
bitbtn13.enabled:=false;
bitbtn14.Enabled:=false;
fbuscli.Free;

Primero hago una busqueda, pulsando el botón de consulta y lo añado al form principal, luego paso a editar y por último accedo a grabar y.... KEY VIOLATION.


Gracias por el interés y un saludo.

coso
15-05-2008, 21:50:33
el fbuscli usa el locate o el lookup? el locate reposiciona el cursor en la tabla...

Alsaca
15-05-2008, 22:03:42
la busqueda la hago utilizando Setkey y Gotonearest.


Gracias.

coso
15-05-2008, 23:19:33
el gotonearest tb reposiciona el cursor. Prueba de conseguir los datos antes del tclient.edit, a ver q pasa (primero los cargas en unas variables, luego tclient.edit, y los pones y post)

PD : tclient.FieldValues['...'] := en vez de tclient.FieldByName('...').As . Creo q estas copiando el objeto en si mismo, no el valor q contiene.