La Web del Programador: Comunidad de Programadores
 
    Pregunta:  23476 - COMO EVITAR ERROR SE INFRINGE UNICIDAD DEL INDICE
Autor:  FABIAN SOLARI
Estoy haciendo mis primeros programas en visual foxpro 6 y se me presenta el error arriba descripto. Tengo una tabla clientes con un indice por código. Por lo que he leido esto se debe a que el indice es principal y no admite claves duplicadas porque supuestamente estoy ingresando un código que esta marcado como borrado en la tabla y deberia paquear la tabla clientes. Ahora mi pregunta es la siguiente: cual es la solucion si necesito tener una clave primaria para poder relacionar la tabla clientes y no deseo paquear la base cada vez que elimine un cliente.
Desde ya muchas gracias.

  Respuesta:  Jose Jaimes
ok simplemente tienes que cambiar los indices a normal, lo que sucede es que puedes tener dos campos indices iguales, o dos espacios en blanco,

para que no suceda esto siempre realiza un procedimiento de confirmacion

ejm:

SELECT Tabla
SET ORDER TO TAG Indice
GO TOP
SEEK ALLTRIM(THISFORM.TXTcampo.VALUE)
IF FOUND()
messagebox("Ya Registrado...",0+16,"Mensaje de Error...")
sCATTER MEMVAR MEMO
THISFORM.TXTCampo.setfocus
THISFORM.REFRESH()
else
l=messagebox("¿Seguro de Registrar éste Campo?...",4+32,"Mensaje de Registro...")
if l=6
append blank
Gather memvar Memo
thisform.refresh()
Wait Windows "Se Registró con Éxito..." timeout 1
THISFORM.TXTCampo.setfocus

endif
ENDIF
THISFORM.INIT

Suerte

  Respuesta:  José Gregorio Samper
cuando crees la tabla colocale al filtro la instruccion !deleted()

  Respuesta:  RENEE ARRAEZ
Estimado colega programador Fabian.

Creo poder darle algunas propuestas de solucion de su problema, pues a mi tambien me paso en alguna ocasion. Por lo que entiendo usted introduce un cliente y este se guarda en la tabla cliente, y a la hora de eliminarlo lo unico que sucede es que el registro se marca para eliminacion, y cuando usted vuelve a ingresar un cliente y coloca la misma clave eliminada ( supongo que la cedula de identidad de la persona) el compilador de visual le envia el mensaje de clave duplica. Amigo esto se puede deber a que a lo mejor usted esta eliminando(en el codigo del botn eliminar) con el zap, bueno si esto es asi hagalo con el pack (primero delete y luego pack ). En caso de que ya usted este haciendo esto entonces probablemente no este abriendo la tabla en modo exclusivo, si ese es el caso entonces en el entorno de datos del formulario "cliente" haga boton derecho sobre la tabla cliente y seleccione propiedades y luego de alli escoga la propiedad excluivo y dele doble click para que se coloque en ".t." verdadero.

Si ya usted esta haciendo todo esto entonces seguramente le falte algun refresh en el codigo de cualquier boton o caja de texto u otro control; de todos modos amigo hay esta mi correo y si sigue el problema entonces envieme el codigo del botn eliminar y tal vez asi lo ayude a resolver su problema. Cuente conmigo.

Atte Renee
Estudiante de Ing. Informatica
Lara-Venezuela.

  Respuesta:  Marvin Antonio Callejas
Modifica la estructura de las tablas y coloca la siguiente expresión de filtro en los índices principales y secundarios:
.NOT. DELETED()
Visual no creará el referencias de los registros marcados como borrados y por lo tanto los indices no darán el error que mencionas.

Saludos