Access Cuadro de texto en formulario que busque si el registro existe

Hacéis el mundo más amable.

Mi pregunta es la siguiente.

Tengo un formulario basado en varias tablas relacionadas ( Clientes y ficha de inscripción) donde voy rellenando una ficha de inscripción a unas actividades en la naturaleza y los datos del cliente que la realiza.

Mi problema es que si un cliente viene más de una vez al parque, creo un cliente duplicado. Al final de año tendré muchos clientes duplicados.

Mi intención es que al introducir un campo ( como los nombres se pueden repetir, quizás el más apropiado sería el campo de mail), si existe salga una ventana de mensaje advirtiendo que el cliente existe y preguntando si se quiere insertar, y al clickar insertar que autorellene sus datos, y si no existe que cree el nuevo registro.

Soy demasiado novato para esto. Así que confío en los expertos.

Otra opción sería al meter algún nombre, si hay varios, saliera un formulario con un listado de los diferentes nombres y poder seleccionar uno.

Gracias de por adelantado y sobre todo gracias por lo que me estáis enseñando.

Alfonso.-

1 Respuesta

Respuesta
2

Lo lógico (y recomendable) es que en tu tabla de clientes tengas un campo único para cada cliente que actúe como clave principal (una buena opción es el DNI). Con esto sólo ya evitas tener registros duplicados, pues si el DNI ya está registrado, el propio Access te avisa.

Para rellenar campos automáticamente campos después de actualizar otro, vas a diseño del formulario, te colocas sobre el campo clave, le das a botón derecho, propiedades, pestaña eventos, después de actualizar, y le das al botón con los 3 puntos que aparece a la derecha, y generado de código. En la ventana que te aparece, escribes algo como esto (voy a suponer que es el campo DNI el que se actualiza, y los campos Nombre y Direccion son los que se rellenan automáticamente):

If IsNull(Me.DNI) Then

Me.Nombre=""
Me.Direccion=""

Else

Me.Nombre=DLookUp("Nombre","Clientes","[DNI]='" & Me.DNI & "'")

Me.Direccion=DLookUp("Direccion","Clientes","[DNI]='" & Me.DNI & "'")

Otra cosa: si ya tienes los datos en una tablas, no es necesario que los repitas en la otra, salvo el campo que relaciona las dos tablas. Si quieres que en el formulario de inscripción, puedes añadir cuadros de texto independientes que te recojan esos valores, sin necesidad de duplicarlos en las dos tablas.

En este caso, debes copiar el código anterior en el evento Al activar registro del Formulario.

Lo he pensado hacer con el campo del email, ya que los clientes los he exportado y no se les pedía el DNI por lo que no teno ese dato, sin embargo el email no debe repetirse (al menos no es usual que dos clientes tenga el mismo email).

Pregunto. ¿debo poner el campo email como clave principal?.

como prodria crear un mensaje de confirmación de que el cliente existe y si quiero insertar los datos?

en mi tabla, cada cliente tiene un campo autonumerico que actua como clave principal

en la tabla de inscripción hay otro id como clave y un campo relacionado uno a varios con el id del cliente.

muchas gracias por tu atención y tu celeridad.

Lo ideal sería tener un campo único para cada Cliente que actúe como clave principal (DNI, email en tu caso, incluso podría ser un numero de teléfono...) Como desconozco el número de registros que tienes en tu tabla clientes no te puedo decir si es mejor que cambies al email la clave principal, pues eso te obligaría a rediseñar la bd y a eliminar los registros duplicados de dicha tabla.

Si lo quieres hacer, puedes hacerlo sin problema, aunque será trabajoso. Una forma para hacerlo más o menos rápido, es borrar la relación con la otra tabla, borrar el campo autonumérico, crear una consulta de totales sobre la tabla Clientes, y luego convertirla en una consulta de creación de tabla. Con esto consigues tener una tabla sin registros duplicados (al menos en teoría, tendrías que repasarlo por si se escapó alguno). Luego tienes que crear de nuevo las relaciones, y actualizar los datos de la tabla inscripciones.

Si no quieres pasar ese trabajo, y no te importa tener los registros duplicados, el evento después de actualizar del campo Email sería este:

Private Sub Email_AfterUpdate()

Dim miEmail, miEmailB as string

miEmail = Me.Email.Value

miEmailB=DLookUp("Email","Clientes","[Email]='" & miEmail & "'")

If Email=EmailB Then

MsgBox "Cliente ya registrado"

Me.Nombre=DLookUp("Nombre","Clientes","[Email]='" & miEmail & "'")
Me.Direccion=DLookUp("Dirección","Clientes","[Email]='" & miEmail & "'")

End If

End Sub

Con este código se rellenarían los datos de los campos Nombre y Dirección (tendrás que cambiarlos por los que necesites...) y si la Tabla no se llama Clientes, tendrás que cambiar el nombre en el código también) para la primera opción que planteabas en al primera pregunta.

Perdona que te de tanta vara...

tengo como 16000 clientes y algunos con mail y otros no, por lo que tendría muchos valores en mail como nulos.

creo que lo mejor sería que al introducir su nombre, si existe, aunque estén duplicados, se abriera un formulario filtrado por el nombre y un listado de los nombres coincidentes con por ejemplo también el campo email y teléfono y poder elegir el que sea e insertarlo en el formulario de inscripciones. y si no existe que directamente lo cree como nuevo.

te lo intento aclarar. Formulario de inscripción, al introducir el nombre (un solo campo con Nombre y apellidos) si existe se abre un subformulario con una lista de los nombres coincidentes y un evento que al clickar sobre el nombre elegido se copien los datos en el formulario de inscripción. por ejemplo, si el nombre es manolo garcía habrá 10 coincidencias, pero solo una la cual, además del nombre, su correo sea [email protected] se clicka (o sobre un botón crerado para ello) sobre el nombre y su ID pasa al formulario autorrellenandose el resto de datos que tenemos del cliente(Teléfono, dirección, etc). y si al buscar no existe coincidencias, directamente se abriera el formulario de crear ficha de cliente.

no se si es complicado.

De nuevo muchas gracias.

Lo que pides no es demasiado complicado, pero para darte una respuesta exacta, necesitaría ver la estructura de tu BD.

Si quieres sube una copia de tu BD, con unos cuantos datos de ejemplo (no me pongas los 16000!) A www.filebig.com ( o cualquier otro por el estilo), me pegas aquí el enlace de descarga y te programo los códigos.

En los datos de ejemplo, que vengan algunos registros repetidos, como el ejemplo que pusiste de Manolo García, para poder probarla bien.

La preparo y te la adjunto.

Mmuchas gracias.

Perdona pero con esto de las fiestas ando muy liado y no me da tiempo de prepararte la base y enviártela.

como la BD que tengo tiene muchos apartados y cosas. aparte de que no sienta muy bien aquí que yo mande datos de clientes aunque sea a un experto como tu....

te estoy preparando una BD con los campor aprox y clientes ficticios. pero voy a intentar explicarme mejor a ver si me ahorro el paso de hacer la BD hasta que no tenga un poco mas de tiempo.

yo creo que es sencillo, pero a mi se me hace un mundo. en definitiva es un campo (como por ejemplo nombre(clienteNomyApell)) de un formulario de reserva (Freservas) que al completarlo tome 2 opciones, una (si no existe el cliente) que abra un formulario (Fcreaclientes) donde poder crearlo y al aceptar, los datos hayan pasado al formulario Freservas. y la otra opción, si existe el cliente o los clientes) que abra otro formulario (fclientesexistentes) donde aparezca un listado con los nombres de los clientes coincidentes (clienteNomyApell).imagino que con un filtro debe ser fácil, y con otros campos de la tabla (tbclientes). por ejemplo mail (clienteMail) y teléfono (clienteTfno). cada cliente de la tabla tiene un IDcliente que está relacionado uno a varios con la tabla de Tbreservas. en este formulario fclientesexistentes habrá también un botón para insertar el cliente en el formulario Freservas.

los botones con el evento para pasar los clientes al formulario de reservas me salen bien, incluso abrir un formulario filtado por un campo también. lo que no se es como poner la condicional de no existe.

gracias por tu paciencia. espero con esto haberme aclarado un poco más, de todas formas prepararé la BD en cuanto tenga un rato y te la envío.

lo dicho. muchísimas gracias.

Te he preparado un mini BD, con dos tablas y tres formularios que espero simulen lo que pides. Dentro del archivo rar, te va un documento que te explica un poco el proceso.

http://www.filebig.net/files/P5Gpg8Ee9x

muchísimas gracias. la estoy descargando. pero cierro ya y puntúo, si me queda alguna duda te vuelvo a preguntar.

un saludo y te debo una.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas