Access - Mostrar un registro si existe

 
Vista:

Mostrar un registro si existe

Publicado por Gummer (1 intervención) el 28/05/2011 01:56:22
Hola a todo el mundo. Tengo una base de datos en access 2003 para la que he creado un formulario para insertar registros. Tengo un campo nombre principal, indexado y sin posiblidad de repetir registro. El caso es que cuando intento introducir un registro repetido, evidentemente, me da error, por lo que tengo que editarlo desde la base de datos. Es difícil hacer que en el formulario que tengo, al introducir un registro repetido, muestre el mismo para su edición? Muchas gracias por leerme.
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 Henry

Mostrar un registro si existe

Publicado por Henry (37 intervenciones) el 03/06/2011 04:32:32
Buenas noches Gummer.
Si soluciones tu problema felicidades, sino lee esto.
No se como añades o guardas los registros, si es por un evento de botón de guardar.
Te envío este evento cuando pulsas el botón de guardar y ocurre el error de registro duplicado. Como funciona el evento:
Cuando se pulsa el botón de guardar y el registro existe, se va a la etiqueta de Err_guardar_Click
se verifica si el codigo de error es 3022, en caso afirmativo se muestra un mensaje que el registro existe, se crea una variable para buscar el registro existente. Coloca una de las dos instrucciones
dependiendo del campo nombre principal de la tabla (si es alfanumérico o numérico). Esa instrucción lo que hace es buscar en la tabla el campo del formulario que se intentó añadir, y lo muestra en el formulario(como tu dices mostrarlo para editarlo).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub guardar_Click()
On Error GoTo Err_guardar_Click
 
     DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
 
Exit_guardar_Click :
    Exit Sub
 
Err_guardar_Click :
    If  Err.Number = 3022 Then                  ' Este es el codigo de error cuando ya existe el registro 
        MsgBox "El registro ya existe"      ' Este es un mensaje propio creado por mi
 
        Dim reg As Object
        Set reg = Me.RecordsetClone
        '------------------------------------------------------------------------------------------------------------------------------
        ' Si el campo es alfanumerico coloca esta instrucción
        reg.FindFirst "[coloca nombre del campo indexado de la tabla] = ' " & Me.?nombre del campo en el formulario? & " ' "
       '------------------------------------------------------------------------------------------------------------------------------- 
        ' Si el campo es numerico coloca esta instrucción
       reg.FindFirst "[coloca nombre del campo indexado de la tabla]= " & Str(Nz(Me.?nombre del      campo en el formulario?, 0))
      '--------------------------------------------------------------------------------------------------------------------------------   
       If Not reg.EOF Then Me.Bookmark = reg.Bookmark
 
   Else
        MsgBox Err.Description
   End If
   Resume Exit_guardar_Click
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Mostrar un registro si existe

Publicado por Gummer (1 intervención) el 28/05/2011 23:29:51
Bueno, gracias a Emilio Sancha, estoy intentando adaptar éste codigo para mi base de datos, pero me da error:

1
2
3
4
5
6
7
8
9
10
Private Sub formnombre_BeforeUpdate(Cancel As Integer)
Dim rst As Recordset, _
    Marcador As Variant
On Error GoTo error_BeforeUpdate_TratamientoErrores
Set rst = Me.RecordsetClone
rst.FindFirst "registrotabla = '" & Me.formnombre & "'"
If Not rst.NoMatch Then
   Me.Undo
   Me.Bookmark = rst.Bookmark
End If


En mi caso, formnombre es el nombre del registro de formulario y registrotabla el nombre que tiene el que quiero comparar. Alguien puede echarme una mano?
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
sin imagen de perfil

Mostrar un registro si existe

Publicado por Martin (17 intervenciones) el 28/11/2012 15:20:19
Hola Henry!!! Probé tu codigo en mi BD y me funcionó pero cuando hay un registro duplicado, me muestra mi MsgBox y paso seguido cuando hago click en "Aceptar" aparace un mensaje de Office diciendo que "Hubo un problema y el programa deberá cerrarse..." Que será que pasa....??
Por cierto esuo el Office 2010.
Gracias y saludos
Martín
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Mostrar un registro si existe

Publicado por Julian (1 intervención) el 10/07/2013 19:03:43
Mira yo agrego un evento KeyPressed en el cuadro de texto del formulario el cual es una llave

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub txtmateria_KeyPress(KeyAscii As Integer)
    Dim sw As Integer, mensaje As String
    sw = 0
    If KeyAscii = 13 Then
        If Len(Trim(txtmateria.Value)) > 0 Then
            sw = 1
        Else
            mensaje = "No ha digitado un valor para la materia"
        End If
 
        If sw = 1 Then
            If BuscaRegistro(Trim(Me.txtmateria.Value), Trim("Materia")) = False Then
                Me.NombreMateria.Value = Trim(Me.txtmateria.Value)
                Me.Prerequisito.Enabled = True
                Me.Transversal.Enabled = True
                Me.Descripcion.Enabled = True
                Me.Descripcion.SetFocus
            Else
                MostrarMensaje "El registro ya aparece registrado", vbInformation
                txtmateria.Value = ""
                txtmateria.SetFocus
            End If
        Else
            MostrarMensaje mensaje, vbInformation
        End If
    End If
End Sub


Declaro la funcion BUSCAREGISTRO tal como se ve y esta me servira para todos los cuadros de texto de todos los formularios donde haya una clave principal, esta funcion gestiona si el registro exste o no y devuelve falso o verdadero, esto es para controlar que no se repitan datos y aparezcan errores fastidiosos de claves primarias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Function BuscaRegistro(ByVal criterio As Variant, ByVal tabla As String) As Boolean
    Dim ws As DAO.Workspace
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
 
    Set ws = DAO.Workspaces(0)
    Set db = ws.OpenDatabase(Ruta)
    Set rs = db.OpenRecordset(tabla)
 
    Dim estado As Boolean
    rs.Index = "PrimaryKey"
    rs.Seek "=", criterio
    If rs.NoMatch = True Then 'No lo encontro
        estado = False
    Else
        estado = True
    End If
    BuscaRegistro = estado
    rs.Close
    db.Close
    ws.Close
    Exit Function
End Function
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 Aki

Mostrar un registro si existe

Publicado por Aki (1 intervención) el 15/05/2014 18:48:49
hola ojala me puedan ayudar.

tengo una tabla [DatGen], con los campos [NGuia],[Fecha],[Bodeguero], e ingreso los datos mediante un formulario llamado GenData, el dato de ingreso al campo de la tabla[NGuia], lo hago por medio del cuadrodetexto[NG], lo que necesito es que al ingresar el dato me indique mediante un mensaje si el dato esta ya ingresado o no, osea si ya existe me represente mediante el mensaje que ya existe el registro y si no existe continue al proximo registro.

de antemano gracias.
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