Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Key Violation (https://www.clubdelphi.com/foros/showthread.php?t=10131)

servicomp 11-05-2004 16:14:04

Key Violation
 
Hola compañeros

Hace pocos dias se me ha dañado una de las tablas de la base de datos que tenia unos indices. Segui los procedimientos acostumbrados y recomendados en el foro, se reconstruyeron los indices y se reindexo de nuevo. pero al momento de almacenar algo en esta tabla nos aparace un mensaje de error de Key violation.

El proceso lo he repetido varias veces pero el problema persiste y la calidad de los datos en la tabla tambien los hemos revisado, asi como la conexión del DBE.

Agradeciendo de antemano la atención prestada

andres1569 11-05-2004 17:31:34

Hola:

Es necesario que indiques con que SGDB trabajas, intuyo que es Paradox. ¿Te has asegurado de que el nuevo registro no repite la clave primaria (eso da un "key violation"). Si no es así, puede que no se haya corregido bien la tabla, en ese caso esste hilo pasará al foro de Tablas Planas, donde se tratan asuntos relacionados específicamente con dichos problemas.

Saludos

servicomp 14-05-2004 22:34:12

Efectivamente el problema estaba en la indice primario, ya que estaba usando una variable de autoincremento, lo que estaba pasando era que tenia 245 registros enumerados desde el 1..245, pero al tratar de ingresar un nuevo registro este me colocaba el 164 como el registro que continuaba. por más que he tratado de aparezca el registro 246 como un nuevo registro nno se ha podido.
Parece que la solución sera copiar la tabla en una nueva y luego renombrarla.

sanxpue 14-05-2004 22:47:52

No...
 
No no no es esa la salucion.. weno si pero no.. je
Vete al DataBase DeskTop, edita la tabla y en lugar de + ponle I la salvas la vuelves a abrir y ahora al I lo cambias por +, te regenera todo :eek:

roman 14-05-2004 23:02:54

Cita:

Empezado por servicomp
Parece que la solución sera copiar la tabla en una nueva y luego renombrarla.

Aquí te va otra:

1. Respalda la tabla
2. Ejecuta SetAutoInc(TableFileName, 245);

donde

Código Delphi [-]
procedure SetAutoInc(TableFileName: String; NewAutoInc: Integer);
var
  FileHandle: Integer;

begin
  FileHandle := FileOpen(TableFileName, fmOpenReadWrite);
  FileSeek(FileHandle, $49, soFromBeginning);
  FileWrite(FileHandle, NewAutoInc, 2);
  FileClose(FileHandle);
end;

La tabla debe estar cerrada.

Explicación: El archivo *.db guarda el último valor autoinc en el offset $49 (en Paradox). La rutina simplemente escribe el valor deseado (245 en tu caso) de manera que el siguiente valor será 246.

Lo acabo de probar y funciona.

// Saludos

Paoti 15-05-2004 02:06:51

Hola!!!

Roman, decime, donde encontraste ese tipo de información!!!!?


De haberlo sabido meses antes, me hubiera podido dormir algunas noches más tranquilo...)

Gracias!!!!


nos vemos

roman 15-05-2004 06:23:44

Cita:

Empezado por Paoti
Roman, decime, donde encontraste ese tipo de información!!!!?

Muy fácil. El siguiente es un enlace que ningún programador de Delphi puede omitir:

Grupos de noticias de Borland

// Saludos


La franja horaria es GMT +2. Ahora son las 11:35:30.

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