No duplicar dato en distintos campos

El ejemplo seria el siguiente: tengo varios campos llamados "Telf. 1", "Telf. 2", etc. Y lo que quiero es que cuando ingrese un número de teléfono de cualquier cliente en cualquier campo de "Telf. X"

no se pueda duplicar. Es decir, que los campos sepan si el número ya está ingresado en otro campo. (Access 2013)

1 respuesta

Respuesta
1

En la cabecera del Módulo asociado al Formulario, declaras la Variable.

Dim IntentosNumTarjeta As Integer

En tu caso puede ser: Dim IntentosNumTelefono As Integer

En el evento BeforeUpdate del Campo que estás introduciendo pones.

Private Sub NumTarjeta_BeforeUpdate(Cancel As Integer)
On Error GoTo NumTarjeta_BeforeUpdate_Err
‘Repite ésta evaluación tantas veces como Campos quieras Sondear. Y sustituye NumTarjeta y Clientes.
‘Clientes es la Tabla.
If (Eval("DLookUp(""[NumTarjeta]"",""[Clientes]"",""[NumTarjeta] = Form.[NumTarjeta] "") Is Not Null")) Then
'Si el valor de NumTarjeta no es único, muestra un mensaje.
Beep
MsgBox "El Numero de Tarjeta que has introducido ya existe." & vbCrLf & "Introduce uno que sea Unico.", vbCritical, "NUMERO DE TARJETA DUPLICADO"
IntentosNumTarjeta = IntentosNumTarjeta + 1
Call CuentaIntentos ' Para permitir solo tres Intentos
'Vuelve al control NumTarjeta.
DoCmd.CancelEvent
End If

NumTarjeta_BeforeUpdate_Exit:
Exit Sub
NumTarjeta_BeforeUpdate_Err:
MsgBox Error$
Resume NumTarjeta_BeforeUpdate_Exit
End Sub 'NumTarjeta_BeforeUpdate(Cancel As Integer)

Function CuentaIntentos()

If IntentosNumTarjeta = 3 Then' Aquí debes sustituir el Nombre de la Variable
MsgBox "Llevas tres Intentos sin exito." & vbCrLf & "El Formulario se cerrará", vbCritical, "MUCHOS INTENTOS"
DoCmd.Close acForm, "Clientes" 'Aquí el Nombre de tu Formulario
End If
End Function

Ya me comentarás si te ha ido bien

Gracias por tu respuesta que seguro que es perfecta, lo que pasa es que me he olvidado decirte que soy novata, estoy aprendiendo y he empezado con un "libro de contactos" que me dijeron que era fácil, pero por lo que veo no es así.

Debería empezar por saber donde está el Módulo asociado al Formulario, de la cabecera, por ejemplo.

Creia que sería tan fácil como poner en propiedades algo como "si, sin duplicados".

Gracias de todos modos por las molestias.

Tona

Lo de “Si, Sin duplicados” lo puedes usar siempre que quieras, y no te permitirá un dato repetido, pero teniendo en cuenta que hace referencia a los datos que vayas introduciendo en “ESE” Campo, no en Otros Campos.

Imagino que aunque novata, abrirás el Editor de VBA sin dificultades.
En cualquier caso, me explico:
En Access 2013 creo que la cinta de opciones es igual que en 2010.
Con tu Formulario en vista de Diseño>> Pulsas la Pestaña Diseño >> A la derecha verás: Ver Código, lo pulsas y se abre el Editor de VBA. Ese es el “Modulo Asociado al Formulario”, y contendrá los Procedimientos y Funciones que necesitas.
Al abrirlo verás que te pone una sola línea de Codigo que es:
Option Compare Database
Añade:
Option Explicit ‘ Esto es muy válido por cuestiones de orden. Te obliga a declarar las variables antes de usarlas

Esto es la “Cabecera del Módulo asociado al Formulario”

Debajo pones la Línea :
Dim…………lo que sea >> mira lo que te escribí
Y ya debajo de esto, copia el Procedimiento que te mandé y lo adaptas a tu Nombre de Tabla, Campos etc.
Copia También la Función de CuentaIntentos

Mientras tu practicas un poco, te prepararé un ejemplo simple, con lo que te he explicado, y a lo largo de ésta Tarde_Noche, te enviaré un enlace para que te lo descargues.

¡Gracias! 

Espero tu ejemplo, tampoco dejes tu ocio para hacer lo mio, no tengo prisa.

Gracias otra vez

Tona

De acuerdo Tona:

Te lo mandaré a lo largo del día de mañana

Este es el enlace del ejemplo que te prometí:

http://www.mediafire.com/download/9tc3o78f7sb44f5/DuplicadoEnOtroCampo.rar 

El tema de duplicidades, es delicado y en el ejemplo que te envio, te avisa en el IdCliente, si está repetido, hasta aquí bien.

No obstante en lo que se refiere a los cuatro campos de números de teléfono, que no permite duplicar un número en ningún campo, está correcto a Nivel Didáctico, pero en mi opinión no es del todo aplicable en el mundo real.

Por ejemplo: Supongamos un dentista que tiene a 2,3 ... miembros de una misma Famlia como clientes y que darán el mismo Teléfono.

Ya hemos limitado la Aplicación.

Quizá en tu caso tengas razones prácticas, en cuyo caso ya me las comentarás cuando me digas que tal te ha ido el ejemplo.

Hola Jacinto, perdona el retraso pero surgieron problemillas de la vida.

El ejemplo funciona, pero me interesaría adaptarlo a mi gusto y no sé.

Lo que me mandaste tú, lo he intentado, pero se ve que algo copio o hago mal y no funciona. La pregunta es: si te mandase un formulario, podrías tu insertarme esta condición y devolvérmelo?

Un saludo

Tona

De acuerdo, pero debes mandarme también la Fuente de datos del Formulario,

Lo mínimo de la BD para poder hacerlo y devolverte el conjunto funcionando.

Mi email es [email protected]

Te la he mandado, muchas gracias.

Tona

Disculpa:

Te había mandado mal mi dirección de correo.

Es [email protected].

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas