Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

detectar campos duplicados en access

Estas en el tema de detectar campos duplicados en access en el foro de Bases de Datos General en Foros del Web. Buenas, tengo una base de datos tipo agenda con varias tablas. Hay personas que están en dos tablas a la vez, por ejemplo, como cliente ...
  #1 (permalink)  
Antiguo 18/03/2006, 15:35
 
Fecha de Ingreso: marzo-2005
Mensajes: 370
Antigüedad: 19 años, 1 mes
Puntos: 1
detectar campos duplicados en access

Buenas, tengo una base de datos tipo agenda con varias tablas. Hay personas que están en dos tablas a la vez, por ejemplo, como cliente y como proveedor. Los datos están duplicados, obviamente.

hay un campo que me interesa poder detectar si está duplicado, y es el email, ya que si envio una newsletter común a clientes y proveedores, no quiero que esa persona la reciba dos veces para no molestarle.

Intente hacer una tabla sólo de emails al enviar la última newsletter, dando valor de clave irrepetible al email, así no se duplicarían, pero tardé muchísimo... ¿hay alguna funcionalidad para hacer esto?

Gracias
Rakeljuice
  #2 (permalink)  
Antiguo 19/03/2006, 01:03
 
Fecha de Ingreso: diciembre-2002
Ubicación: Roma
Mensajes: 60
Antigüedad: 21 años, 4 meses
Puntos: 0
La mejor solución sería hacer un SELECT DISTINCT pero MS Access no tiene esta funcionalidad. En este caso, podrías probar con un UNION. UNION te da los resultados de dos "queries" sin duplicados. Prueba con

SELECT tblCliente.nombre, tblCliente.email FROM tblCliente

UNION

SELECT tblProveedor.nombre, tblProveedor.email FROM tblProveedor;

Esta query te dará la lista de las direcciones e-mails sin duplicados, siempre que las dos tablas tengan los mismos nombres. Si por ejemplo tienes un nombre "Cia Dos Amigos S.A." en una, y "Compañía Dos Amigos S.A." en otra, el dato será duplicado. Si tienes este problema talvez podrías probar con solo los e-mails.

gara

http://www.asptutor.com/sql/sql10.asp
  #3 (permalink)  
Antiguo 20/03/2006, 10:14
 
Fecha de Ingreso: marzo-2005
Mensajes: 370
Antigüedad: 19 años, 1 mes
Puntos: 1
No se si me explique bien. Empiezo diciendo que estoy mas que verde en Acces, y que no se cómo meterle a una tabla ni una linea de código.

Hasta ahora, lo que hago es:

1. Hago una tabla nueva con un solo campo, email, en el que este es indexable y no puede contener duplicados.

2. Copio la columna de emails de la tabla clientes y la pego en la columna de la nueva tabla

3. Copio la columna de emails de la tabla proveedores y la pego en la columna de la nueva tabla

4. Durante estos procesos, el access me dice si hay errores de pegado, cuando un campo emailde clientes o proveedores esta vacio, o cuando alguno se duplica.

5 Copio todos los emails y los meto en el programa de correo para enviarlos.

Problema: que el procedimiento es algo pesado y rudimentario... Y lo tengo que hacer cada vez que envío un correo.

Me gustaría tener una tabla sólo de emils donde se fuesen añadiendo los emails nuevos que voy insertando, y que tuviese otro campo más solamente que indicase de qué tabla proviene cada email.

Ahi queda, si alguien me puede contar algo, lo agradezco.

Rakeljuice
  #4 (permalink)  
Antiguo 20/03/2006, 10:28
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Puedes hacer lo siguiente (si te sirve):

Crea una nueva tabla en modo diseño siguiendo estos pasos:

1) Abre una nueva consulta en vista diseño.
2) En esta consulta, muestra las tablas que contienen los mails (clientes y proveedores)
3) en el menú superior, ve a "consulta" -> "consulta de creación de tabla"
4) dale un nombre a la tabla que se creará
5) en la parte inferior, selecciona los campos de las tablas que vas a capturar (mail de clientes y mail de proveedores) (cada uno en una columna, claro)
6) cierra y guarda la consulta, dándole un nombre
7) abre la consulta; te pedirá confirmación una o dos veces.
8) ve a las tablas y abre la nueva tabla creada

El resultado:

Una tabla que tiene una columna por cada origen (clientes/proveedores) y que tiene los mails de ambas.

Para actualizar esta nueva tabla con los que hayas insertado, sólo tienes que volver a ejecutar la consulta. En este caso, te pedirá una confirmación más, ya que primero tiene que vaciar la tabla para volver a rellenarla con los "nuevos" datos.
  #5 (permalink)  
Antiguo 20/03/2006, 10:35
 
Fecha de Ingreso: diciembre-2002
Ubicación: Roma
Mensajes: 60
Antigüedad: 21 años, 4 meses
Puntos: 0
Rakel,

No querría ser insistente, pero el union es la mejor forma de hacerlo en Access. Si puedes dar la structura de tus tablas te podría tratar de explicar que hacer.

A menos que otros cyber-colegas tengan otras ideas.

gara
  #6 (permalink)  
Antiguo 20/03/2006, 12:12
 
Fecha de Ingreso: marzo-2005
Mensajes: 370
Antigüedad: 19 años, 1 mes
Puntos: 1
Muchas gracias Garabito. Te doy la estructura... No se, si quieres te envío la base de datos vacía (sin datos, solo estructura) a algun email... No se cómo hacerlo de otra forma. He leido más detenidamente tu anterior post, y creo que si me dices dónde tengo que insertar esos comandos, podré hacerlo.
Y como lo que quiero son solo los email, se podria poner esto?:

SELECT tblCliente.email FROM tblCliente
UNION
SELECT tblProveedor.email FROM tblProveedor;

Y otra pregunta? Esa tabla creada con esto del UNION se actuliza sóla? O hay que crearla cada vez?

Muchas gracias Ludovico. Con tu método aislo los emails, pero no me elimina los duplicados, con lo que hay personas que recibirían los email duplicados.

Gracias de nuevo a los dos
  #7 (permalink)  
Antiguo 20/03/2006, 12:29
 
Fecha de Ingreso: diciembre-2002
Ubicación: Roma
Mensajes: 60
Antigüedad: 21 años, 4 meses
Puntos: 0
Dame tu e-mail e te mando una ilustración (screenshots) de como insertar los comandos.

La tabla se actualizar sola cada vez que ejecutas la query.

[email protected]
  #8 (permalink)  
Antiguo 20/03/2006, 15:26
 
Fecha de Ingreso: marzo-2005
Mensajes: 370
Antigüedad: 19 años, 1 mes
Puntos: 1
Gracias
Mi email [email protected]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:00.