Indice candidato

Hola mi nombre es Marco Antonio.
Tengo un formulario para dar de alta, baja, cambios; a clientes.
El problema, es que puedo hacer para que al capturar no se de, de alta 2 veces al cliente con el mismo nombre.
He utilizado, poniendo un indice candidato en el campo nombre, me funciona bien, pero pasa que se da de alta el nombre de un cliente, luego este cliente se elimina.
Pero el problema es que no se puede volver a dar de alta por que el nombre del cliente ya existe solo esta marcado el registro como eliminado, lo solucionaría haciendo un pack a la tabla, pero el sistema es multiusuario
No puedo ponerla de modo exclusiva si otros están utilizando la misma tabla.
¿Cómo podría solucionar esto?
De antemano gracias.

5 Respuestas

Respuesta
1
Como estas, colócale al indice el filtro ! Deleted() y esto te solventa la situación
Respuesta
1
Perdona la demora pero estaba sin internet en éstos días. El problema que tienes tiene una solución fácil, te explico: Los registros se validan en el indice, lo que debes hacer es asegurarte de que se filtren en el indice los datos borrados, te doy un ejemplo:
INDEX ON nombre TAG nombre FOR !Deleted() CANDIDATE
Si lo haces en código, y si usas el asistente, en el espacio filtrado coloca la clausula ! Deleted()
No dudes en consultarme si tienes dudas
Respuesta
1
Fíjate que al iniciar la aplicación estés utilizando la siguiente instrucción "set dele on", esta sentencia lo que hace es ocultar los registros marcados para eliminar de cualquier tabla que abras y en una búsqueda o en un browse o edición no se visualiza dicho registro, y si estas trabajando con instrucciones sql debes colocar en la condición where la instrucción ! Deleted() ejm.: "select * from mydbf where !deleted()" esta instrucción te muestrra una consulta pero no toma en cuenta los registros marcados como eliminados.
Respuesta
Este es un problema tipo de xbase. Lo que yo hago, es que utilizo un "archivo especial". Este archivo contiene un solo registro. En mi procedimiento de altas, trato de hacer un LOCK al registro de mi "archivo especial", si logro darle LOCK, entonces continuo con el proceso de validar el nombre del cliente y darle de alta si es posible. Si no logro darle LOCK, le doy aviso al usuario de que vuelva a tratar unos segundos más tarde. Con esto, evito que dos personas traten de dar de alta un registro que no existe en el mismo momento en que los dos lo están buscando. Lo que hay que tener cuidado, es que no ocurra un Dead Lock. Debes estructurar bien tu programa para que no se queden ambos usuarios esperando a que el otro "suelte" el registro del "archivo especial".
Suerte !
Rocco.
Se supone que debería ser "Unico", pero cuando a mi me dio el error de los registros eliminados, decidí no utilizar las bondades de las bases de datos de vfox y mejor programar a pie, es decir, programar yo mismo mis validaciones, no es lo correcto pero así no me peleo con vfox.
Respuesta
-1
La verdad el problema me parece sencillo de solucionar, claro desde el punto de vista del planteamiento del problema que detallas.
Me parece que debes de comprobar primero si el usuario se encuentra registrado, caso contrario insertarlo, en caso de se encuentre registrado indicarle que ya existe.
Espero poderte haber ayudado, si no es lo que deseas hacer.
Pero esta validación que mencionas donde debe ir en el cuadro de texto o botón de guardar o procedimiento almacenado.?
El formulario trabaja en modo buffer.
¿Debo utilizar un indice normal o candidato?
Esta validación la debes hacer antes de intentar grabar el registro, primero compruebas si existe, una vez que tienes la confirmación prosigues con el paso deseado.
Con respecto al índice, imagino que habrás definido la característica de tu archivo y el criterio de búsqueda a utilizar. Primary Key, con este o estos campos deberás realizar tu validación.
Suerte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas