Access - Impedir registros duplicados por dos campos iguales.

 
Vista:
sin imagen de perfil
Val: 10
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por José (5 intervenciones) el 24/05/2020 10:32:22
Buenos días.

Mis felicitaciones por la labor que hacen.

En relación con el tema del asunto tengo un formulario "FrmMntoBDActCul" basado en una tabla de nombre "Actividad" que entre otros, tiene un campo Clave principal y otros llamados “Actvdad” y “Deque”. La idea es evitar que la combinación de estos dos últimos no se repitan y en tal caso el usuario reciba un aviso del tipo "Registro repetido".

Atentamente.
RgtrosDplcdos
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 Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por Joan (150 intervenciones) el 24/05/2020 11:28:38
Hola,

Usa un Recordset de la tabla Actividad.

Saludos
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
sin imagen de perfil
Val: 10
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por José (5 intervenciones) el 24/05/2020 12:40:56
Perdona, pero me he quedado igual. No estoy muy puesto en el tema.
Agradecería que me lo explicase en otros términos, para entenderlo.
De todas formas. 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
Imágen de perfil de Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por Joan (150 intervenciones) el 24/05/2020 13:04:16
Hola,

Pega este código en el editor de Visual basic y marca "Procedimieto de evento" en Después de Actualizar en los combobox Actividad y Deque:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub Actividad_AfterUpdate()
 
comprobar
 
End Sub
 
Sub comprobar()
 
Dim act As String
Dim deq As String
Dim rst As DAO.Recordset
Dim db As DAO.Database
 
Set db = CurrentDb
Set rst = db.OpenRecordset("Actividad")
 
rst.MoveFirst
Do Until rst.EOF
 
act = Nz(rst.Fields("Actividad").Value)
deq = Nz(rst.Fields("Deque").Value)
 
If act = Me.Actividad And deq = Me.Deque Then
MsgBox "Registro repetido"
Me.Actividad = ""
Me.Deque = ""
Exit Sub
Else
End If
 
rst.MoveNext
 
If rst.EOF Then
 
End If
 
Loop
 
rst.Close
db.Close
Set db = Nothing
Set rst = Nothing
 
End Sub
 
Private Sub Deque_AfterUpdate()
 
comprobar
 
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
0
Comentar
sin imagen de perfil
Val: 10
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por José (5 intervenciones) el 24/05/2020 17:42:39
Parece que le falta algo, después de salir del segundo campo. Aparece el mensaje de "Registro repetido", etc. Según imágenes "RgtDplcdo.jpg, RgtDplcdo1.jpg y RgtDplcdo2.jpg ". Cerrando estas pantallas y saliendo del registro, lo admite y guarda el registro a pesar de estar repetido.
RgtRptdo
RgtRptdo1
RgtRptdo2

Este es el código insertado:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub Actvdad_AfterUpdate()
 
comprobar
 
End Sub
 
Private Sub Deque_AfterUpdate()
 
comprobar
 
End Sub
 
Sub comprobar()
 
Dim act As String
Dim deq As String
Dim rst As DAO.Recordset
Dim db As DAO.Database
 
Set db = CurrentDb
Set rst = db.OpenRecordset("Actividad")
 
rst.MoveFirst
Do Until rst.EOF
 
act = Nz(rst.Fields("Actvdad").Value)
deq = Nz(rst.Fields("Deque").Value)
 
If act = Me.Actvdad And Deque = Me.Deque Then
MsgBox "Registro repetido"
Me.Actvdad = ""
Me.Deque = ""
Exit Sub
Else
End If
 
rst.MoveNext
 
If rst.EOF Then
 
End If
 
Loop
 
rst.Close
db.Close
Set db = Nothing
Set rst = Nothing
 
End Sub

Quedo a su disposición.

Un saludo.
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 Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por Joan (150 intervenciones) el 24/05/2020 20:54:19
Hola,
No se qué tipo de datos habrás creado el campo en la tabla.

cambia las líneas 15 y 16 por:

1
2
3
Dim act As Variant
 
Dim deq As Variant

las líneas 31 y 32 por:

1
2
Me.Actvdad = Null
Me.Deque = Null
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
sin imagen de perfil
Val: 10
Ha disminuido su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por José (5 intervenciones) el 24/05/2020 22:14:22
RgtRptdo3
RgtRptdo4
RgtRptdo5

Hola!
Disculpa, como veras los campos "Actvdad" y "Deque" son númericos y estan basado en columnas de búsquedas de campos de tablas relacionadas y son de tipo texto, como puedes ver por las imágenes que te adjunto. Al final como anteriormente me da error, como se muestra en la imagen RgtRptdo6.
RgtRptdo6


Como queda el codigo:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub Actvdad_AfterUpdate()
 
comprobar
 
End Sub
 
Private Sub Deque_AfterUpdate()
 
comprobar
 
End Sub
 
Sub comprobar()
 
Dim act As Variant
Dim deq As Variant
Dim rst As DAO.Recordset
Dim db As DAO.Database
 
Set db = CurrentDb
Set rst = db.OpenRecordset("Actividad")
 
rst.MoveFirst
Do Until rst.EOF
 
act = Nz(rst.Fields("Actvdad").Value)
deq = Nz(rst.Fields("Deque").Value)
 
If act = Me.Actvdad And Deque = Me.Deque Then
MsgBox "Registro repetido"
Me.Actvdad = Null
Me.Deque = Null
Exit Sub
Else
End If
 
rst.MoveNext
 
If rst.EOF Then
 
End If
 
Loop
 
rst.Close
db.Close
Set db = Nothing
Set rst = Nothing
 
End Sub


Saludos.
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 Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por Joan (150 intervenciones) el 24/05/2020 23:04:48
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Private Sub Actvdad_AfterUpdate()
 
comprobar
 
End Sub
 
Sub comprobar()
 
Dim act As Integer
Dim deq As Integer
Dim rst As DAO.Recordset
Dim db As DAO.Database
 
Set db = CurrentDb
Set rst = db.OpenRecordset("Actividad")
 
If rst.RecordCount = 0 Then Exit Sub
 
rst.MoveFirst
Do Until rst.EOF
 
act = Nz(rst.Fields("Actvdad").Value)
deq = Nz(rst.Fields("Deque").Value)
 
If act = Me.Actvdad And deq = Me.Deque Then
MsgBox "Registro repetido"
Me.Undo
 
Exit Sub
Else
End If
 
rst.MoveNext
 
If rst.EOF Then
 
End If
 
Loop
 
rst.Close
db.Close
Set db = Nothing
Set rst = Nothing
 
 
End Sub
 
Private Sub Deque_AfterUpdate()
 
comprobar
 
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
0
Comentar

Impedir registros duplicados por dos campos iguales.

Publicado por José Garrido Pérez (1 intervención) el 25/05/2020 08:09:50
Buenos días.
Tus indicaciones, las probé anoche y van de maravilla.
Supongo que con la ansiedad del programa se me ha olvidado presentarme.

Mi nombre es Jose Garrido de 65 años y natural de Gibraleon, Huelva. Si viene por aquí me encantaría saludarlo.

Gracias de nuevo.
Saludos.
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

Impedir registros duplicados por dos campos iguales.

Publicado por Anonimo (3324 intervenciones) el 25/05/2020 09:52:48
Desearía aclarar un detalle....

Si los datos se introducen mediante un formulario y en el formulario se aplica cualquier control … funcionaria, pero:

Si se accede directamente a la tabla se podrán repetir 'hasta el infinito y mas allá'

Solo CONDICIONANDO la tabla se podrá garantizar la existencia de registro únicos (con formulario o sin, el con copy & paste o sin el, con inserción mediante SQL o sin ella).

Independiente de que se utilice cualquier método de control en los formularios, las reglas a cumplir se han de imponer en la tabla (en una programación con futuro).
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 Joan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Impedir registros duplicados por dos campos iguales.

Publicado por Joan (150 intervenciones) el 25/05/2020 15:54:54
De nada
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

Impedir registros duplicados por dos campos iguales.

Publicado por Anonimo (3324 intervenciones) el 24/05/2020 13:53:18
Para que una tabla no admita duplicidad de datos, solo se precisa crear un INDICE con esos campos y ponerle como condición que sus valores sean únicos.

Para conocer si existe un valor (conjunto de valores) solo hay que utilizar una función de dominio (DLookup o DCount) y como condición los valores (conjunto de valores) que se desee verificar.

1
If DCount("*", "TABLAXXX", "A = " & valor1 & " And B = " & valor2 & " And C= ……..")  = 0  Then MsgBox "No esta en la tabla"
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