PDA

Ver la Versión Completa : Evitar duplicar el nombre y apellido de una persona


Lizette
29-01-2009, 21:57:51
Hola, en mi aplicación tengo un edit para ingresar el nombre o nombres del cliente y otro para los apellidos, pero tengo problemas a la hora de registrar un nuevo cliente utilizando la función Locate, hago uso de banderas, si encuentra el nombre q puse en el edit, la ban:=1, se pasa al edit de apellido si el apellido lo encuentra ban1:=1, si las dos banderas son 1, me dice que el cliente ya esta registrado..

Pero si en la base de datos tengo registrado a Cynthia Elizabeth Benavides García y si ingreso en el edit de nombre Cynthia Fabiola y en el edit de apellidos Benavides López, me dice que el cliente esta registrado.

Es decir, sólo me toma el primer nombre y el primer apellido.. Alguna idea de como validar esto? Gracias

Chris
29-01-2009, 22:02:47
En las opciones de la función Locate, debes quitar "loPartialCompare", de esta forma quedaría así ...Locate('nombre del cliente', 'nombre_campo', [loCaseInsensitive]

Saludos.

marcoszorrilla
29-01-2009, 22:04:13
Conviene que digas que motor estás utilizando, en cualquier caso yo apuesto por una clave única compuesta de ambos así será el propio motor el que rechace los duplicados.

Un Saludo.

Lizette
29-01-2009, 22:24:35
Estoy utilizando mysql, el caso esk como llave primaria tengo una clave que la genera el sistema, utilizando el numero de registros que se tienen dados de alta.. Pero seria conveniente no tener a dos personas con el mismo nombre..

roman
29-01-2009, 22:46:57
No entiendo bien cómo estás haciendo la búsqueda. ¿Qué pones en el locate? Por otro lado, en tu base ¿tienes un campo para apellidos y otro para nombre o es un sólo campo para el nombre completo?

// Saludos

Lizette
30-01-2009, 00:36:36
Gracias lo puede resolver con el Locate como me dijo D&W (http://www.clubdelphi.com/foros/member.php?u=17730) , el problema esque tenía mal una desición..

Gracias Roman, estaba a punto de mandarte el código cuando vi mi error.. Gracias de todos modos.. ;)

Saludos

cmm07
30-01-2009, 01:02:12
te recomiendo hacer eso con instruccion mySQL, aparte si no quires que se duplique ¿por que no creastes esos campos con la opcion de "Unique"(creo que es asi, ya que me traslade a sql xD)..?

AzidRain
30-01-2009, 19:45:45
Me parece que estamos ante un caso de un mal diseño de la tabla. Recordemos Lizette que las tablas se deben diseñar ANTES de pensar siquiera en que lenguaje vamos a programar. En el caso de una tabla de clientes (ignoro si es para una facturación o algo así y si eres de México) normalmente se utiliza ua clave artificial (como es tu caso) o bien se utiliza alguna que ya exista como por ejemplo un RFC (o nIF en otros lados) que es un poco más seguro, aunque no infalible. En todo caso lo que pretendes hacer es correcto pero entonces tienes que crear un indice compuesto que integre los campos NOMBRE y APELLIDO (o los que corrspondan) y le pones el atributo unique, de esta forma el motor no te aceptará registros que tengan los mismos datos en esos campos y en tu aplicación ya no tienes que hacer esa operación.

De todos modos vas a tener estos problemitas:
Que pasa si dos clientes se llaman exactamente igual (JUAN PEREZ) por ejemplo. El sistema solo te va a aceptar a uno y el otro lo tomará como que es distinto. Por otro lado, si lo dejamos un poco más libre, te aceptará a ambos y podría alguien dar de alta varias veces a un mismo cliente por error.

Yo te recomiendo que incluyas algún valor único como el RFC o CURP para evitar que capturen 2 veces un mismo cliente, esto independientemente del número que te genera el sistema.