** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Registro repetido
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRegistro repetido

 Responder Responder
Autor
Mensaje
WarriorGeardark Ver desplegable
Nuevo
Nuevo


Unido: 29/Abril/2020
Localización: Mexico
Estado: Sin conexión
Puntos: 32
Enlace directo a este mensaje Tema: Registro repetido
    Enviado: 14/Julio/2020 a las 05:40
Hola amigos del foro, les pido su ayuda de la manera más atenta, lo que pasa es que tengo una tabla de usuarios, donde en el campo Usuario coloque Indexado sin duplicados para que el nombre de usuario no se repita, y cuando agrego a un usuario repetido en un formulario me aparece el Error 3022 y me manda al modo depuración, quiero evitar ese error y colocar un mensaje que diga que ese registro ya existe, ya busque en el foro y hay temas sobre ese error e intente colocar lo que encontré pero ningún código me funciono, vi que algunos decían que en el formulario de error colocara esto y mi código que hace el guardado es el segundo:
Private Sub Form_Error(ErrNumber As Integer, Response As Integer)
If Err.Number = 3022 Then 'He cambiado esta linea también
MsgBox " Este Dato ya está Registrado," & Chr(13) & "EL Nº YA ESTA EN", vbCritical, "ERROR ENTRADA DE DATOS"
SendKeys "{ESC 2}"
Err.Clear  ' Borra el error
S
Me.txtNombreUsuario.SetFocus   'Envía el foco del formulario al control CodigoProducto
DoCmd.CancelEvent  ' Y Cancela el evento
End If
End Sub

Private Sub cmd_Guardar_Click()
If IsNull(txtNombreUsuario) Or IsNull(txtUsuario) _
    Or IsNull(txtPassword) Or IsNull(cmbDepartamento) Then
        MsgBox "Debe completar todos los campos", , "Nuevo Usuario"
    Exit Sub
End If

    Recordset.AddNew
    Recordset.Fields("Solicitante") = Trim(UCase(txtNombreUsuario))
    Recordset.Fields("Usuario") = Trim(UCase(txtUsuario))
    Recordset.Fields("Password") = txtPassword
    Recordset.Fields("IdDepartamento") = cmbDepartamento
    Recordset.Fields("RegistroSolicitudOficio") = chkSolicitudOficio
    Recordset.Fields("ConsultasExcel") = chkConsultasExcel
    Recordset.Fields("BuscarOficios") = chkBuscarOficios
    Recordset.Update
MsgBox "Registro Guardado correctamente", vbInformation, "Nuevo"
txtNombreUsuario.Enabled = False
txtUsuario.Enabled = False
txtPassword.Enabled = False
cmbDepartamento.Enabled = False
chkSolicitudOficio.Enabled = False
chkConsultasExcel.Enabled = False
chkBuscarOficios.Enabled = False
cmd_Guardar.Enabled = False
cmd_Nuevo.Enabled = True
End Sub

Pero no hace nada o no se si no lo coloque bien.
Tambien intente con un manejador de error, si logre que me saliera el mensaje de que el Dato ya estaba repetido pero al hacer un clic y al agregar el siguiente Usuario se me salto un id autoincrementable, es que si estoy en el id 5 y agrego un registro repetido me sale el error y despues agrego un usuario nuevo se me salta al id 7, si hago varios clic me salta varios id como es autoincrementable.
El código que encontre fue esto:
    On Error GoTo Err_Number
Recordset.Update
Exit Sub
Err_Number:
MsgBox " Este Dato ya está Registrado ," & Chr(13) & "EL Nº YA ESTA EN USO, DATOS DUPLICADOS", vbCritical, "ERROR ENTRADA DE DATOS"
SendKeys "{ESC 2}"
Err.Clear 'Borra el error
DoCmd.CancelEvent
End Sub

Les agradezco por su atención, he estado batallando todo el día y no logro solucionarlo.


Editado por WarriorGeardark - 15/Julio/2020 a las 00:12
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 15/Julio/2020 a las 00:20
Hola!

Creo que tienes un lío montado en los códigos que posteaste.

Mírate el ejemplo 98 de la página del maestro Emilio Sancha.

Editado por mounir - 15/Julio/2020 a las 00:21
Un Saludo.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 15/Julio/2020 a las 09:46
Hola,

Como dice mounir, tienes un lio considerable de códigos. Varias cosas veo yo también.

En el manejo del Form_Error (que nunca utilizo por ser demasiado genérico para mi gusto)
- El evento tiene los argumentos DataErr y Response. Tu has puesto ErrNumber y Response. Pero es que dentro del código utilizas Err.Number Ouch
- Utilización de SendKeys. Uno de los comandos más peligrosos de Access
- Una "S" por ahí suelta (que podría ser un error tipográfico)

En el Guardar_Click
- No se antepone Me! a los controles lo que puede dar lugar a confusión entre controles y variables/constantes
- Utilización de la palabra reservada "Recordset" para referirse a un conjunto de datos
- Ausencia de declaración de variable y asignación del recordset

En el último trozo de código
Si inicias la inserción de un código y se cancela, el valor incremental utilizado se pierde. Una de las máximas de Access es que los incrementales (o autonuméricos) sirven para generar registros únicos; nunca se utilizan como contadores. Si precisas que el autonumérico no deje huecos, entonces cambia a un numérico "normal" y genera tu el valor. Existe abundante literatura bajo el concepto "falsos autonumerico".

Un saludo



Xavi, un minyó de Terrassa

Mi web
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable