Evitar Duplicidad de Registro en Access-vba

Agradezco a las personas que invierten su tiempo y conocimiento en ayudarnos. La presente es para solicitar ayuda con respecto a un código que se supone no debería permitir la duplicidad en una tabla y si lo permite. Me explico, tengo una Tabla llamada TblEventos, que consta de varios campos entre los cuales esta IdDelegacion, que es uno de los campos de la tabla TblDelegacion, la tabla TblDelegacion contiene los campos idDelegacion, idEventos, Funcion, Cedula, Nombres, Apellidos, Categoria. La tabla Delegacion toma registros de las tablas TblAtletas, TblEntrenadores, TblOtros que son los integrantes de las delegaciones que participan en los eventos, cada uno de estos integrantes ya existen en las tablas correspondientes, ahora bien un integrante de un listado de un evento, puede asistir a otros eventos, lo que se quiere es validar que un integrante no sea ingresado dos veces en un mismo evento, intente subir el código que tengo y no pude, voy a pasarlo en otra pregunta

Respuesta
1

Independiente del control que se desee hacer al momento de introducir los datos, la solución que debería aplicarse es generar un índice único (en el diseño de la tabla) con los campos que no puedan repetirse.

Eso impedirá el duplicado por cualquier medio (incluso inyectándole los datos).

¡Gracias!   Al parecer  tengo que trabajar con gestor de base de datos, para hacer un índice único, como me dices, o se puede hacer sin el gestor

Tienes claro que combinación de campos no se pueden repetir, el índice es fácil de crear:
.- Tabla en modo diseño
.- Click en el icono del rayo (titulo: índices)
--- En la ventana que se abre ---
.- Un nombre para el índice (cualquiera, excepto palabras reservadas para evitar líos)
.- A su lado se selecciona en el desplegable el primer campo irrepetible
.- Bajo el: el segundo (sin titulo y asume el primero, un titulo = un índice nuevo)
.- Los que se necesiten a continuación (cuantos mas campos mas precisión, limitarse a los indispensables)
--- Finalizada la selección de campos, seleccionar el índice y se le aplican propiedades
.- Principal en NO (o se crea una llave y no es lo que se busca)
.- Única en SI (impide repetir la misma combinación de campos)
.- Omitir nulos (es volitivo pero en Si no hace daño)

Al cerrar la ventana intentara generar el índice y ... si hay repeticiones (pueden existir, no había índice antes) dará error por lo que habrá que localizarlos y ello se puede hacer con consultas (la de agrupación y contando las repeticiones suele ser muy útil).

Una vez que los datos son únicos, dejara crear el índice.
El índice evitara repeticiones (que delatara al intentar guardar el registro), se acostumbra a verificar en tiempo de ejecución (DCount es muy útil) si ya existe en el conjunto y evitar el mensaje de error).

Los índices son muy útiles al trabajar con las tablas, con SEEK la respuesta es ¿instantánea?, no se aconseja abusar de los índices únicos (una tabla puede tener varios), pues ha de verificar que se cumplan las reglas antes de admitir el registro.

¡Gracias! Eso que me estas diciendo es con gestor de base de datos?  pues primero voy a estudiar sobre un Gestor de Base de Datos, porque no los he usado, pensé que con ACCESS se podía, gracias por tu tiempo, saludos

Investigué un poco más y entendí lo que me indicaste, solo que no sabía la opción de ACCESS, de crear indices, coloque en Cédula Única, borré todos los registros que tenía, "basura", e ingrese la Cédula en un evento, bien, traté de ingresar la misma cédula en el mismo evento y no lo permitió "datos Duplicados", perfecto;  pero... al ingresar esa cédula en otro evento, no lo permitió;  la idea es que me permita registrar una cédula, en varios eventos, se puede hacer? 

Los índices solo impiden el duplicado de los registros, no el utilizarlos.

Lo único que pudiera ocurrir es que (al índice) se le activase la propiedad 'Principal', lo que lo convierte en un campo llave y para hacer una referencia al registro (como elemento único) se han de utilizar todos los campos que conforma la llave.

Si ese fuera el caso, basta con desactivar esa propiedad y todo debería funcionar como antes (excepto el insertar en la misma tabla el mismo registro o uno que incumpla esas condiciones).

¿No es en EVENTOS donde no se debería evitar esas repeticiones?..
El mismo evento en diferentes fechas (o turnos u otra cualidad del registro) los considera diferentes (quizás se debería revisar el índice y añadir una cualidad mas).

¡Gracias!  por tu ayuda, ya logré incluir la cédula solo una vez, por la cantidad de eventos que quiera, utilizando el indice compuesto de access, una maravilla, saludos

1 respuesta más de otro experto

Respuesta
1

Trate de subir la estructura de sus tablas, es posible que necesite un índice compuesto, con la información aportada no se puede entrar en detalles.

¡Gracias!, por su ayuda,  he intentado subir la imagen de la estructura de la tabla, por la opción de la la barra y no he podido, intente copiar el código, y tampoco pude, y eso que la velocidad de la conexión que tengo a internet es de 99 Mbps, ¿cómo puedo hacerlo?, me indica por favor

Intente enviar imagen y no pude, voy a enviarla por acá

TblEventos

idEvento                                 autonumerico

Evento                                    Texto

Categoria                                Texto

Ciudad                                      Texto

Desde                                       Fecha

Hasta                                        Fecha

Monto                                       Número

Disciplina                                 Texto

Ambito                                       Texto

Rama                                           Texto

Municipio                                     Texto

Estado                                           Texto

Pais                                                 Texto

TblDelegacion

IdDelegacion                                     autonumerico

IdEventos                                           Número

Funcion                                               Texto

Cedula                                                 Número

Nombres                                              Texto

Apellidos                                              Texto

Sexo                                                       Texto

Categoria                                               Texto

Tienen una relación TblEventos/Uno   a  TblDelegacion/Varios   pot el campo IdEventos

Entiendo debe crear en la tabla un índice compuesto por los campos IdEventos + Cedula tipo ÚNICO. Esto hará que solo se pemita 1 evento por delegación y número de cedula.

¡Gracias! He trabajado el programa sin gestor de base de datos, pero ya veo la necesidad de hacerlo, ya que pienso hacer el programa con más funciones, a fin de que cubra la necesidad de la organización donde trabajo, no tengo idea de como hacerlo, ya indagaré como usar el gestor, gracias a la utilidad de la red, y a personas como usted, que nos brindan sus conocimientos, podemos aprender hoy día más fácil, que hacen 30 años atrás, cuando me inicie en la programación con COBOL y PASCAL, gracias por su ayuda, saludos 

Si quiere trabajar con un verdadero gestor de base de datos puede utilizar PostgreSQL u otro, con este puede tener aplicaciones en Access y compartir la información en la nube. Este curso lo imparto a varias personas de Chile, Nicaragua, México y Colombia. Es otro mundo donde se trabaja sin formularios vinculados, es decir, todo es por código, el beneficio, capacidad, seguridad y agilidad porque las consultas y actualizaciones se hacen directamente en el servidor.

y al usar este gestor, puedo seguir usando lo que tengo ya hecho?

Investigue un poco, y al parecer tengo que hacer todas las tablas en el gestor de base de datos, pero mi pregunta, si hago las tablas en PostgreSQL, puedo utilizar los formularios de ACCESS, o presentará alguna incompatibilidad

Ana, para utilizar PostgreSQL y Access, requiere conocimientos avanzados sobre Access, principalmente en lo referente a ADO y ADODB para la manipulación de datos (tablas y campos), lógicamente puede utilizar los formularios de Access de 2 maneras, con tablas vinculadas a un DSN o desvinculadas utilizando ODBC (la mejor opción) pero requiere de buenos conocimientos de ADODB. Mi recomendación realice primero un curso de PostgreSQL así comprenderá mejor la potencia de este servidor en relación con bases de datos JET (Access), con la tecnología y disponibilidad de servidores en la nube porque no aprender PostgreSQL así tendrá acceso a los datos desde cualquier pc que tenga internet y Access

Resumiendo, si debe procesar bastantes datos y piensa compartir su información al mismo tiempo con otros usuarios en su empresa no pierda tiempo con Access, no es el indicado para entorno multiusuario.

¡Gracias! Bueno pues será emigrar de ACCESS, y hacer el curso de PostgreSQL, y además, también debo programar en otro lenguaje, cual me recomendaría usted, que me pueda servir, con la experiencia que tengo en ACCESS

No dude en aprender Python.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas