FoxPro/Visual FoxPro - Borrar Registros Duplicados

 
Vista:

Borrar Registros Duplicados

Publicado por Brinklo (4 intervenciones) el 11/04/2007 17:53:17
Hola a todos
Necesito la ayuda de alguno de ustedes.
Tengo una tabla de clientes con sus caracteristicas.
Mi indice es el numero de Cuenta (num_cta) pero muchos de los usuarios que utilizan mi base de datos, han agregado varios clientes cuya informacion esta repetida (el nombre, direccion, referencias, etc). Pero el numero de cuentas es distinto.
Cree un codigo para intentar localizarlos pero ya me trabé,

*Utilizo la tabla Clientes indexada por nombre del cliente
SELECT 1
USE CLIENTES INDEX CLI_NOMB SHARED

SELECT 1
DO WHILE .NOT. EOF()
*Guardo los primeros valores
NOMB1=NOMB_CLI
DIR1=DOMICILIO
*SEEK CLIENTES->NOMB_CLI
DO WHILE.NOT. EOF()
*Guardo los segundos valores
NOMB2=NOMB_CLI
DIR2=DOMICILIO
*Si son iguales
IF NOMB1=NOMB2 .OR. DIR1=DIR2 THEN
*Borrar el registro o marcarlo
ENDIF
SKIP
ENDDO
SKIP
ENDDO
CLOSE ALL

Podria alguien ayudarme o si tiene una sugerencia mejor es bien recibida?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Borrar Registros Duplicados

Publicado por Raul (28 intervenciones) el 11/04/2007 18:28:01
T aconsejo utilizar un segundo parametro que defina con mas exactitud a la persona o cliente, por ej. DNI o CUIT, etc.

Espero t sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Borrar Registros Duplicados

Publicado por Ernesto Hernandez (4623 intervenciones) el 11/04/2007 18:41:00
Cree un codigo para intentar localizarlos pero ya me trabé

donde te trabaste ??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrar Registros Duplicados

Publicado por jorge (423 intervenciones) el 11/04/2007 22:03:36
los campos, nombre,. domicilio, ciudad, referencias, aun tratandose del mismo cliente, son ambiguas es decir, pueden repetirse sin identifacor por codigo si es el mismo o se trata de otro
Ej, JUAN PEREZ LOPEZ
JUAN P. LOPEZ
JUAN PEREZ L.
JUAN P. LOPES

etc..
lo que debes poner es un dato unico, como RFC/CURP etc.. que defina que se trata de una sola persona

de otra forma va a ser un poco dificil... a menos que el borrado lo hagas de forma manual, es decir tu escogas quien se elimina y quien no
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias todos

Publicado por Brinklo (4 intervenciones) el 11/04/2007 23:33:23
Ya pude jiji.
Solamente le puse un del. Asi quedo:

*Utilizo la tabla Clientes indexada por nombre del cliente
USE CLIENTES INDEX CLI_NOMB SHARED
GO TOP
DO WHILE NOT EOF()
_CUENTA=NUM_CTA
_NOM=NOMB_CLI
_PRIMERO=.T.
DO WHILE NOMB_CLI=_NOM AND NOT EOF()
IF _PRIMERO
SKIP
_PRIMERO=.F.
LOOP
ENDIF
DELETE
SKIP
ENDDO
ENDDO
CLOSE ALL

De cualquier forma es muy buena idea la de agregar el RFC. Aunque en realidad no tengo tantos clientes para que sean homonimos. Pero lo hare pensando en crecer la tabla

GRACIAS...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias todos

Publicado por Giovany Muñoz (1 intervención) el 27/03/2016 22:56:42
gracias por el ejemplo, les cuento que me sirvió de mucho
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias todos

Publicado por WILSON MEDINA (1 intervención) el 15/05/2019 00:58:30
Muchas gracias, me sirvió tu ejemplo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Borrar Registros Duplicados

Publicado por anonimo (1 intervención) el 17/05/2013 15:24:01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SET INDEX TO && Se desactiva el indice que tenga la tabla
contador=0
DO WHILE NOT EOF()
	codabuscar=cod_art && Reemplace "cod_art" por el campo clave para el marcado
	voyenrecno=RECNO()
	GO top
	LOCATE FOR cod_art=codabuscar && Reemplace "cod_art" por el campo clave para el marcado
	DO WHILE FOUND() AND NOT EOF()
		CONTINUE
		IF NOT EOF()
			DELETE
		ENDIF
	ENDDO
	nextrec=voyenrecno+1
	IF nextrec > RECCOUNT()
		EXIT
	ELSE
		GO nextrec
	ENDIF
ENDDO


&&att: [email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar