Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Key Violation (https://www.clubdelphi.com/foros/showthread.php?t=56388)

Alsaca 15-05-2008 20:52:49

Key Violation
 
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.

Cita:

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.


La franja horaria es GMT +2. Ahora son las 16:32:47.

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