Como evitar el error 3022 valores duplicados

Dudas sobre código
Rolly15
Nivel 3
Mensajes: 54
Registrado: Mar Dic 01, 2015 8:33 pm

Como evitar el error 3022 valores duplicados

Mensajepor Rolly15 » Jue May 12, 2022 11:22 pm

Hola, en primer lugar agradecer la ayuda que me prestáis siempre que lo necesito. Ahora os comento con el problema que se me planteado.
Tengo una base de datos de filiaciones (Nombre, Apellidos, dirección, documento, etc.), en la cual entre otros formularios tengo uno de Altas y otro de Consultas, en el formulario de altas tengo un cuadro de listas con los siguientes datos: Dni, Nie, Carnet Conducir, Pasaporte.
Selecciono en el cuadro de lista uno de los valores anteriormente citados y a continuación según el valor seleccionado inserto en un textbox (Dni) los datos .Hasta aquí todo bien, doy las altas y sin problemas, tengo realizadas cerca de 500 altas.
El campo Dni es la clave principal.
Esta es la instrucción que utilizo para los datos del textbox:
Private Sub Dni_GotFocus()
If Documento.Value = "DNI" Then
Dni.InputMask = "90,000,000->L;0;"
ElseIf Documento.Value = "NIE" Then
Dni.InputMask = ">L-0,000,000->L;0;"
ElseIf Documento.Value = "Carnet de conducir" Then
Dni.InputMask = "90,000,000->L;0;"
ElseIf Documento.Value = "Pasaporte" Then
Dni.InputMask = ""
End If

Ahora viene la cuestión o el problema que se me ha planteado y con el que no contaba, resulta que tengo que insertar un dato de una persona que va indocumentada, lo inserto y guardo los datos, pero ahora se me ha presentado otro indocumentado y a la hora de guardar el registro me ha saltado el error 3022”los cambios solicitado en la tabla no se realizaron…..”,
Como podría intentar solucionar este problema que me ha aparecido.
Yo he intentado solucionarlo con esta instrucción:
On Error Goto Error
Error:
If Err.Number = 3022 then Err.Clear
Pero no me hace nada, podéis ayudarme como podría solucionarlo, no creo que se me presenten muchos indocumentados pero alguno caerá y tendré que darlo de alta.
Un Saludo.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1387
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Como evitar el error 3022 valores duplicados

Mensajepor Sveinbjorn » Vie May 13, 2022 8:28 am

Por definición, una "clave principal" es un campo o un conjunto de campos con valores únicos en una tabla, y tal como lo tienes montado, no hay forma de evitar ese error de duplicados, salvo que te "inventes" un valor para cada indocumentado.

Una forma relativamente sencilla es añadir un autonumérico a tu tabla y usarlo como campo clave, lo que te obliga a "rediseñar" tu BD y adaptar todas las tablas relacionadas con esa usando la nueva clave en vez del campo DNI.

Como siempre, haz una copia de tu BD antes de hacerle los cambios por lo que pueda pasar... ;)
Sveinbjorn El Rojo

Avatar de Usuario
Neckkito
Moderador
Mensajes: 1205
Registrado: Dom Oct 25, 2015 3:42 pm

Re: Como evitar el error 3022 valores duplicados

Mensajepor Neckkito » Vie May 13, 2022 10:08 am

Hola!

Refrendo todo lo que comenta Sveinbjorn. Por aportarte otro apaño, podrías crearte una tabla auxiliar que simplemente te guardara el último valor utilizado para los indocumentados (un número). Por ejemplo, te creas en esa tabla un solo registro con el valor uno (1) en el campo [miNum].

Después, al dar de alta, un indocumentado, el proceso a realizar sería:

1.- Recuperas ese valor con un dlookup()
2.- Lo envías al campo DNI con una concatenación del tipo "INDOC-xx" (donde XX sería el número recuperado con el Dlookup)
3.- Actualizas el valor en la tabla auxiliar con una instrucción del tipo: currentdb.execute("UPDATE tablaAux SET miNum=miNum+1")

Lo dicho: por aportar una idea más.

Saludos.
Access MVP 2017-2022
http://bit.ly/NckAccess

Rolly15
Nivel 3
Mensajes: 54
Registrado: Mar Dic 01, 2015 8:33 pm

Re: Como evitar el error 3022 valores duplicados

Mensajepor Rolly15 » Vie May 13, 2022 10:46 pm

Muchísimas gracias a los dos por responder, al final opte por la opción de Neckkito.
Gracias !!!
Un Saludo.


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 10 invitados