Access - Comprobar duplicados en Neptuno

   
Vista:

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 26/08/2012 12:40:23
Estoy buscando una manera ( macro o similar) de evitar introducir valores duplicados en un campo, con la aparición de un mensaje o similar.
He encontrado en Neptuno una solución.
En el Formulario "Clientes", evita la introducción de valores ya existentes en el campo "IdClientes", a través de una macro Clientes.ComprobarId, que se aplica "Antes de actualizar".
Al trasladarlo a mi caso, adaptando la macro, resulta que después de introducir el valor en el campo, no puedo salr del campo, ni con Intro, flechas de desplazamiento o cualquier otro método; con lo cual ni siquiera puedo comprobar que el método es eficaz.
Sugerencias, por favor.
Gracias por anticipado.
Saludos.
Heth
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
Imágen de perfil de Neckkito

Comprobar duplicados en Neptuno

Publicado por Neckkito (1104 intervenciones) el 26/08/2012 17:23:36
Hola!
Con el tema de Neptuno no puedo ayudarte porque no he tocado esa BD en mi vida.
Si quieres probar con otro sistema echa un vistazo a este ejemplo: http://goo.gl/Vj7XX
A ver si te puede servir.

Un saludo,

Neckkito
... http://neckkito.eu5.org ...
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 05/09/2012 21:41:42
Hola Neckkito.
Creo que es lo que busco.He estado bastante ocupado y no he podido verlo bien, pero parece que resuelve mi problema.
Ya te comentaré.
En cualquier caso muchas gracias.
Saludos.
Heth.
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

Comprobar duplicados en Neptuno

Publicado por heth (42 intervenciones) el 09/09/2012 19:26:45
Hola Neckkito.
He adaptado el código a mi casi y no me funciona.
Al salir del campo, del que quiero evitar los duplicados, me sale un cuadro que dice
"Se ha poducido un error 2001 en tiempo de ejecución.
Canceló la operación anterior"
Y bajo tres botones "Finalizar" ;"Depurar"; "Ayuda".
Activo Depurar y me sale la hoja de código, donde esta resaltado en amarillo

vMedicamentoB = DLookup("[Medicamento]", "Datos", "[Medicamento]=" & vMedicamento)

donde está exactamente adaptado a mi caso tu sentencia, poniendo em ligar de Valor, Medicamento y en lugar dela tabla TValores, la tabla Datos.
¿ Qué he hecho mal ?
Saludos.
Heth
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
Imágen de perfil de Neckkito

Comprobar duplicados en Neptuno

Publicado por Neckkito (1104 intervenciones) el 09/09/2012 19:56:37
Hola!
Con la información que proporcionas me es imposible darte una respuesta.
Haz dos cosas:
Primero, la variable vMedicamento me imagino que estará referenciada a un campo del formulario. El valor de ese campo, ¿es numérico o es de tipo texto?
Segundo, pégame todo el código que estás utilizando, porque sin más datos la línea de código que me indicas, en cuestión de sintaxis, es correcta.
Por ahora poco más puedo hacer. Espero tus comentarios.
Un saludo,
Neckkito
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 15/09/2012 13:24:39
La variable vMedicamneto está referenciada a un campo de un formulario, que a su vez prodece de una tabla "Datos";el campo "Medicamento" es un campo de texto.
A continuación te pego todo el código

Private Sub Medicamento_AfterUpdate()
Dim vMedicamento, vMedicamentoB As Variant
vMedicamento = Me.Medicamento.Value

If IsNull(vMedicamento) Then Exit Sub


vMedicamentoB = DLookup("[Medicamento]", "Datos", "[Medicamento]=" & vMedicamento)
If vMedicamentoB = vMedicamento Then
MsgBox " La medicina ya existe ", vbInformation, "AVISO"
Me.Medicamento.Value = Null
Me.Id.SetFocus
Me.Medicamento.SetFocus
End If

End Sub
El procedimiento de evento anterior está vinculado al campo "Medicamento" de un formulario llamado "IntroducirMedicinas" que procede de la tabla "Datos". He intentado cambiar en el código la tabla "Datos", por el formulario "IntroducirMedicinas" que es el formulario donde estoy aplicando el código y no me ha dado resultado.
¿ Necesitas algo más ?
Gracias por todo.
Saludos.
Heth
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
Imágen de perfil de Neckkito

Comprobar duplicados en Neptuno

Publicado por Neckkito (1104 intervenciones) el 15/09/2012 18:16:07
Hola!

Cambia tu línea:


vMedicamentoB = DLookup("[Medicamento]", "Datos", "[Medicamento]=" & vMedicamento)

Por esta otra


vMedicamentoB = DLookup("[Medicamento]", "Datos", "[Medicamento]='" & vMedicamento & "'")

A ver si con esto se te soluciona el problema.

Saludos,

Neckkito
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 17/09/2012 13:23:58
Hola Neckkito.
Ya me has resuelto el problema.
Muy agradecido por todo.
De todos modos y, a título meramente informativo, la sintaxis de la función DLookup, no es la habitual que yo conozco. ¿ De dónde sale ? ¿ es solo aplicable a travésdel VisualBasic ?
Una vez más, Muchas Gracias.
Saludos.
Heth
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
Imágen de perfil de Neckkito

Comprobar duplicados en Neptuno

Publicado por Neckkito (1104 intervenciones) el 17/09/2012 13:53:46
Hola, Heth!

Me alegro que se te haya resuelto el problema

Desconozco cómo conocías la sintaxis del DLookup pero te diré que no es exclusivo de VB. Tiene banstantes ámbitos de aplicación. De todas maneras, ten en cuenta que lo que sería una sintaxis "sencilla", en tu caso, da la sensación que se "complica" porque estamos utilizando valores a través de variables.

Si quieres puedes echarle un vistazo a esta página, donde se muestran los ámbitos de aplicación del DLookup. Está en inglés, pero hay muy poco texto "explicativo" y sí "ejemplificativo", y es fácilmente entendible: http://www.techonthenet.com/access/functions/domain/dlookup.php

Un saludo,

Neckkito
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 25/09/2012 11:40:55
Hola Neckkito.
Gracias por la información de la función DLookup , trataré de asimilarla.
Con relación al código para eviatr repeticiones que me has enviado y funciona, existe un aspecto que quería comentarte. Aparentemente es obligatorio que exista el campo Id. Lo he incluido, pero por efectos más bien estéticos, le ha aplicado la propiedad No Visible, y en este caso no funciona.
A efectos , más bien estéticos como te digo ¿ Existiría alguna posibilidad de que el campo Id. no estuviera visible?.
Gracias por anticipado.
Saludos.
Heth
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
Imágen de perfil de Neckkito

Comprobar duplicados en Neptuno

Publicado por Neckkito (1104 intervenciones) el 25/09/2012 11:51:31
Hola!
Cuando intentas situar el enfoque sobre un control que no está visible te salta error de código. Si tú sitúas ID como no visible y en el código tienes la línea:

Me.Id.SetFocus

Cuando busca el Id "no lo ve", y de ahí el error.

La solución es tan simple como dejar el ID como NO visible, como querías, y realizar el rebote del foco sobre otro control que sí esté visible.

Es decir, que si tienes un control que se llama, por ejemplo, [FechaRegistro], sólo tendrías que sustituir:

Me.Id.SetFocus

Por:

me.[FechaRegistro].Setfocus

Te recuerdo que el nombre del control es el que te aparece en sus propiedades, pestaña otras -> Nombre

A ver si con eso se te soluciona.

Saludos,

Neckkito
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 26/09/2012 13:31:06
Hola Neckkito.
Ya he cambiado a otro control y me ha quedado perfecto.
Gracias otra vez.
Saludos.
Heth.
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 05/10/2012 15:37:29
Hola Neckkito.
He intentado evitar duplcados en un fomulario que solo tiene un campo, además del Id ; y en este caso no me queda más remedio que dejar visible el Id, pues no hay otro campo al que pueda enfocar ; he intentado enfocar a un Comando y no he conseguido nada. He intentado esconderlo tras una etiqueta o un campo de texto y tampoco me ha salido, pues el campo Id aparece en primer término.
El tema que te planteo es meramente estético, pues no hay inconveniente serio para que el campo Id esté visible.
De todos modos ¿ Hay algún medio para conseguir evitar duplicados en este caso sin que aparezca el Id visible ?
Gracias por anticipado.
Saludos.
Heth
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
Imágen de perfil de Neckkito

Comprobar duplicados en Neptuno

Publicado por Neckkito (1104 intervenciones) el 05/10/2012 15:45:30
Vaya... rizando el rizo, ¿eh?

Es necesario un control para hacer el rebote del enfoque. Si me dices que sólo hay un control no necesitas rebote. Ergo basta que quites las dos líneas de código donde aparece el método SetFocus; el resto de código se queda igual.

Si al hacer esto, por la propia estructura del objeto, el formulario te salta a un nuevo registro (o registro siguiente) tendrás que cambiar el ciclo del formulario. El ciclo es una propiedad el formulario que, ahora mismo, no recuerdo en qué pestaña está (no estoy seguro si en Datos o en Otras). Esta propiedad "Ciclo" debería quedarte en "registro activo".

Eso sí, deberás poner algún medio, ya sea a través de los botones de desplazamiento (los botoncitos que te aparecen abajo a la izquierda) o a través de botones de comando, para poderte desplazar por los registros o ir a un registro nuevo.

Un saludo,

Neckkito
http://neckkito.siliconproject.com.ar
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 08/10/2012 13:44:40
Hola Neckkito.
Efecivamente, rizando el rizo.
Ya he suprimido las líneas correpondientes al SetFocus, y me ha quedado perfecto.
Observaré los posibles problemas que aparezcan con el Ciclo. Si existiera alguno, ya me pondría en contacto.
Gracias por todo.
Saludos.
Heth.
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 24/10/2012 21:10:53
Hola Neckkito.
Vuelta al tema, con una nueva dificultad.
Cuando introduzco un valor duplicado, sale el aviso y elimina el valor que he introducido. Hasta ahí todo según lo deseado. Si a continuación introduzco otro valor - no duplicado-, sigue el proceso normalmente.
Pero si el valor que he introducido es el último, es decir , que no introduzco ninguno más, entonces se me crea un registro vacío.
Como no me interesan registros vacíos, lo resuelvo abriendo la tabla de origen y eliminando el regidtro vacío
¿ Existe algún sistema menos rudimentario de resolver esto ?.
Gracias otra vez.
Saludos.
Heth
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
Imágen de perfil de Neckkito

Comprobar duplicados en Neptuno

Publicado por Neckkito (1104 intervenciones) el 25/10/2012 08:16:13
Hola!

Hay varias maneras de hacer lo que pides. Yo me decantaría por la segunda que te explico, pero en ocasiones, según lo que necesites, es mejor la primera. En fin... "a gusto del consumidor"

Suponiendo que tengas un botón para cerrar el formulario (que sería lo "normal"), puedes meter un código de verificación en el evento "Al hacer click" para comprobar qué hay por ahí.

Eliges un campo que obligatoriamente deba estar lleno. Si está vacío es que el registro no está rellenado correctamente. Llamémosle [Requerido].

Ergo la estructura del código sería algo así como:

...
On error resume next 'Meto este control de errores para evitar el mensaje que no se puede borrar el registro ahora
'Antes de cerrar compruebo
If isnull(me.Requerido.value) then
'Borro el registro
docmd.runcommand accmdDeleteRecord
End if
'Y aquí el código del botón para cerrar el formulario
...

La otra opción es crearte una consulta de eliminación (llamémosla CElimino), donde filtras por [Requerido] = Null

Entonces, en el evento de formulario "Al cerrar", generas este simple código:
...
Private Sub...
docmd.setwarnings false
docmd.openquery "CElimino"
docmd.setwarnings true
End sub
...

Y él solito te borrará los registros donde [Requerido] no tenga valor.

Un saludo,
Neckkito
http://neckkito.siliconproject.com.ar
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 28/10/2012 12:08:32
Hola Neckkito.
Voy a intentar alguna de las soluciones. Si tengo alguna duda ya me pondré nuevamente en contacto contigo.
Otra vez gracias.
Saludos.
Heth.
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 29/10/2012 18:27:54
Hola Neckkito.
Ya estoy otra vez aquí.
Estoy tratando de aplicar la primera manera que me has descrito.
Tengo efectiamente un botón Salir, que al hacer click, cierra el formulario.
Por otra parte no tengo aparentemente ningún campo que esté necesariamente lleno.
A efectos de ejemplo sencillo imagínate que en el formulario solo tengo dos campos [Ciudad] y [Provincia], por el que se adjudica a cada [Ciudad], la [Provincia] correspondiente, y cuando se introduce un valor de la [Ciudad] repetido es cuando se desarrolla el proceso de evitación de duplicados. Existe además un cuadro de lista con todas las provincias para seleccionar una de ellas. No sé si servirá como [Requerido]. Este campo se llama [Lista4].
Independientemente de lo anterior, de lo que me dices entiendo que hay que estableser primero el código que yo tengo para el comando Salir y después el que tu me has enviado.
Como ya habrás observado tengo muy poca idea del Visual Basic, pues me manejo exclusivamente con macros, de modo que he hecho un refrito con el código que tu me has dado y el que yo he podido deducir de la macro Salir, que actualmente tengo El Comando13, corresponde al botón Salir. A ver si hay suerte.
PrivateSub_Comando13_Click()
Exit_Comando13_ Click
Exit Sub
On error resume next
If isnull (me.Requerido.value) then
docmd.runcommand accmdDeleteRecord
End If
End Sub.
y [Requerido] el que tu veas que debo poner.
Perdona el rollo, pero no he sabido explicarme con menos palabras.
Gracias nuevamente.
Saludos.
Heth
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
Imágen de perfil de Neckkito

Comprobar duplicados en Neptuno

Publicado por Neckkito (1104 intervenciones) el 29/10/2012 18:39:13
Hola!

Necesitamos un campo de control porque, si no, ¿cómo sabe Access que ese registro no es correcto? Por eso te comentaba que si había un campo requerido que quedaba en blanco sería un indicio para poder decirle a Access: "este registro no es correcto: bórralo".

Ese campo requerido da igual el que sea... Lo importante es que sea el criterio para decir: en blanco -> Registro incorrecto -> Borrar

En cuanto a tu código, y asumiendo que el campo que comentas [Lista4] sea nuestro "indicador" de registro erróneo, el código del botón debería quedarte así:
...
PrivateSub_Comando13_Click()
On error resume next
If isnull (me.Lista4.value) then
docmd.runcommand accmdDeleteRecord
End If
Docmd.Close acForm, Me.Name
End Sub.
...

Debo decir que el código que me has pasado parece incompleto. Lo que hace este código que te paso es, simplemente, cerrarte el formulario activo. Si no es esa la idea me comentas.

Un saludo,

Neckkito
http://neckkito.siliconproject.com.ar
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

Comprobar duplicados en Neptuno

Publicado por heth (42 intervenciones) el 30/10/2012 12:38:21
Hola Neckkito.
Con relación al código que yo te pasé, el milagro es que estuviera bien, pues no sé VB, y lo que hice fué copiar el código que tu me enviaste y añadirle una interpretación mía de un código Salir. Demasiado que no te cachondeaste de él.
Con relación al campo [Requerido] entendí inicialmente que debía estar lleno; sin embargo en la descripción cualitativa que me has dado : en blanco>Registro incorrecto>Borrar, parece que debo buscar un campo que esté en ese momento vacío, que puede ser el propio campo que trato de evitar los duplicados, y que por el código de evitar duplicados está en ese momento vacío.
Para no hacer más elucubraciones, probaré y te comentaré.
Gracias.
Saludos.
Heth
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

Comprobar duplicados en Neptuno

Publicado por Heth (42 intervenciones) el 31/10/2012 16:03:25
Hola Neckkito.
He probado el códgo que me has enviado y funciona perfectamente.
Gracias.
Saludos.
Heth.
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