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

1
Respuesta de
Hola como estas, colócale al indice el filtro !deleted() y esto te solventa la situación
Saludos
Añade un comentario a esta respuesta
1
Respuesta de
Hola Amigo, 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
Añade un comentario a esta respuesta
1
Respuesta de
BUENO.. 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. Espero que esta sea la solución a tu problema.
Añade un comentario a esta respuesta
0
Respuesta de
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.
Añade un comentario a esta respuesta
-1
Respuesta de
Saludos
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, te agradeceré explicar un poco más el problema.
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje