Evitar introducción de valores duplicados en access antes de la introducción del registro completo

El pasado 8/10/10 la experta "Angelessebas" respondía el usuario "edu1965" por esta misma duda.

Como podéis leer en el siguiente enlace:

http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/microsoft-access/respuestas/2510768/aviso-emergente-para-evitar-duplicados-access-2007

El usuario respondía a la experta, que no le funcionaba lo que ella le había propuesto (a mí me pasa lo mismo). La solución que finalmente ella adoptó fue enviarle por correo electrónico la base de datos en la que ella lo había probado y le había funcionado. Yo les pediría a cualquiera de los dos que si leen mi pregunta, que me envíen a mí también esa base de datos. Y si no la lee ninguno, pues que otro experto me intente ayudar resolviendo mi duda.

1 Respuesta

Respuesta
2

Echa un vistazo a este ejemplo, que creo que responde a lo que pides: http://goo.gl/9faUqx

Si tras aplicarlo necesitas ayuda me comentas y echamos un vistazo.

Espero que te sirva.

Hola Miquel.

Ante todo agradecerte tu rápida respuesta. Lamentablemente, y a pesar de que me he bajado la base de datos y el pdf que me indicabas, a mi me sigue sin funcionar en mi base de datos. He copiado literalmente mediante un copia y pega el código que aparece en dicha base para campos no numéricos (puesto que el mío es de texto), y le he cambiado los nombres a mi tabla, a mi campo y a mi formulario, para que coincidan con los del ejemplo. Pero ni así. No tengo ni idea de lo que puede pasar, pero a mi me sigue aceptando duplicados.

No se si aquí es posible subirte mi base de datos por si tu pudieses ver dónde está el fallo.

Espero tu respuesta, un saludo.

Envíamela, comprimida en zip o rar, por favor, a neckkito(ARROBA)myopera(PUNTO)com

En el mail te rogaría que me indicaras el nombre del formulario o formularios, controles y tablas que intervienen en el proceso, para que pueda ubicar el problema más rápidamente.

Antes de enviártela mañana, haré un nuevo intento de aplicarlo todo desde el principio, para no molestarte en vano. Si me sigue sin funcionar, te la envío.

Muchas gracias.

OK!

Ningún problema. De una manera u otra espero tus comentarios ;)

Por fin me ha funcionado. Lo que ocurría es que en lugar de colocar el código en el evento después de actualizar lo colocaba en antes de actualizar.

Tengo una duda más, que es si sería posible una función similar a la de autocompletar de excel, de forma que cuando estuviese escribiendo una palabra o frase anteriormente introducida, saliese automáticamente, para no tener que intro introducirlo de nuevo.

Pero creo que esto ya es otra pregunta y que antes tendría que finalizar y puntuar ésta.

Tú me indicas. Y gracias por todo.

Me alegra que lo hayas podido solucionar. :)

En cuanto al tema de lo de autocompletar... Efectivamente sería otra pregunta. Además, según como lo quieras, es un tema un tanto complicado, pero echa un vistazo a este ejemplo, a ver si lo puedes adaptar: http://goo.gl/xwqHTo

Buenas.

Resulta que me va bien con todas las cadenas de texto, pero cuando introduzco una frase en inglés con el apostrofe " ' ", por ejemplo "It's my live", me sale:

"Se ha producido el error '3075' en tiempo de ejecución:

Error de sintaxis (falta operador) en la expresión de consulta "[Elemento]=It's my live".

Y si le doy a depurar se ilumina en amarillo la siguiente línea:

vElemB = DLookup("[Elemento]", "Tvalores", "[Elemento]='" & vElem & "'").

Creo que es por utilizar como comodín exactamente el carácter: " ' "

Espero tu respuesta.

Gracias de nuevo.

Ahí sí tenemos un problema, porque la comilla simple es un elemento reservado de VB.

Si utilizas Access 2003... pues el sistema no funcionará. Como mucho puedes añadir un control de errores para evitar que te salte un error.

Como primera instancia (siempre hablando de 2003) lo que se me ocurre, bote pronto, es crear un campo auxiliar en la tabla que te produzca un reemplazo de la comilla simple por otro carácter, y que en el formulario, al introducir un valor, realice la misma conversión de caracteres y busque en ese campo auxiliar. Sin embargo, tendría que probarlo porque sólo se me ocurre la "idea global", pero no cómo podría plasmarse en código. Eso requeriría "sentarme a pensar" ;)

Si utilizas 2007 o superior la solución es sencilla, ya que a partir de 2007 Access introduce las variables temporales llamadas TempVars. En ese caso el código debería ser (te modifico el código del ejemplo de la web; supongo que no tendrás problemas para adaptarlo):

...

Private Sub Elemento_AfterUpdate()
Dim vElem, vElemB As Variant
vElem = Me.Elemento.Value
If IsNull(vElem) Then Exit Sub
TempVars!miElem = vElem
vElemB = DLookup("[Elemento]", "TValores", "[Elemento]=TempVars!miElem")
If vElemB = vElem Then
MsgBox "El elemento introducido ya existe", vbInformation, "AVISO"
Me.Elemento.Value = Null
Me.Id.SetFocus
Me.Elemento.SetFocus
End If
End Sub

...

Utilizo access 2010 y la base estrá creada con access 2007, así que no he tenido ningún problema. Eso sí, me he limitado a copiar como un papagayo los códigos, sin saber lo que estaba haciendo, pues no tengo ni idea de basic, aunque me gustaría.

Pues nada, que estupendo y que muchas gracias por tu desinteresada atención.

Miraré el tema de autocompletar y a ver qué tal.

Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas