Access - MsgBox ya existe solo una vez

 
Vista:

MsgBox ya existe solo una vez

Publicado por blas (143 intervenciones) el 01/08/2012 18:26:52
Hola a todos.

Con este código que he encontrado en los foros, puesto en el evento al perder el enfoque, queria que me avisara que un DNI ya existe, pero me avisa siemrpre.

Yo quiero que solo me avise la primera vez cuando introduzco datos en un formulario, es decir cuando el campo DNI esta vacio. No se si me explico bien. Alguin me puede ayudar
Gracias.


Private Sub campoDNI_LostFocus()
Dim var As Integer

var = Nz(DLookup("[campoDNI]", "[nombretabla]", "[campoDNI]='" & Me.campoDNI.Value & ""))
If Not IsNull(var) Then
MsgBox "¡Este DNI ya existe!", vbCritical,

Form!campoDNI.SetFocus
End If
Exit Sub
End Sub
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
sin imagen de perfil

MsgBox ya existe solo una vez

Publicado por deneg_nhj (348 intervenciones) el 01/08/2012 22:44:00
Estimado

Mira yo tengo un enfoque diferente para validar lo que requieres

1. Si es posible, pon el campo DNI como llave primaria, con esto validas que no exista duplicados.

2. si no "puedes" hacer el primer punto entonces tal vez esto te sea de utilidad.
-- Efectua dicha validación en el evento "BeforeUpdate"

En este ejemplo de "nominas" valido si existe el periodo indicado.
1
2
3
4
5
6
7
8
9
10
11
12
If Me.NewRecord = True Then
        DoCmd.SetWarnings (False)
            DoCmd.OpenQuery "qryN_GenNomvalPeriodo01"
            nNumReg = ObtItemsCapt("select count(*) from e_N_ExisteNom01  ")
        DoCmd.SetWarnings (True)
 
        If nNumReg > 0 Then
            MsgBox "Ya existe un periodo registrado!", vbCritical, "Duplicidad en periodo"
            Cancel = True
            Exit Sub
        End If
    End If
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

MsgBox ya existe solo una vez

Publicado por deneg_nhj (348 intervenciones) el 01/08/2012 22:47:10
La consulta "qryN_GenNomvalPeriodo01" obtiene una tabla que contiene los datos que estoy validando, si me regresa informacion, entonces ya existe. "e_N_ExisteNom01" es la tabla que genera esta consulta.


Aqui esta la funcion "ObtItemsCapt"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Function ObtItemsCapt(strOrden As String) As Double
'FINALIDAD : Obtener la sumatoria de un campo o el numero de registros de una tabla
'Aun Cuando es utilizada por otras rutinas en las cuales se desea saber si la tabla tien registros
'El parametro de la orden SQL debe de ser Count(), que en algunos casos puede Sum
Dim tbCheckCant As Recordset
Dim nResult As Double
 
nResult = 0#
 
Set tbCheckCant = CurrentDb.OpenRecordset(strOrden)
 
If tbCheckCant.RecordCount < 1 Then
  nResult = 0#
Else
 nResult = Nz(tbCheckCant.Fields(0), 0)
End If
 
'Asignamos el valor a devolver
ObtItemsCapt = nResult
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 Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MsgBox ya existe solo una vez

Publicado por Neckkito (1157 intervenciones) el 02/08/2012 13:32:00
Hola!
Puedes probar de poner el mismo código que tienes, pero asignado al evento "Después de actualizar".
Saludos,
Neckkito
... http://neckkito.eu5.org ...
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

MsgBox ya existe solo una vez

Publicado por blas (143 intervenciones) el 03/08/2012 11:35:59
Hola a los dos y muchas gracias por vuestras respuestas.


deneg_nhj, no puedo hacer este campo clave principal porque ya tengo otro, me da igual que haya o no duplicados, solo quiero que me avise de que ya existe ese DNI, pero lo dicho solo cuando se introduce por primera vez, es decir cuando el campo en el formulario este vacio.

Ya he probado en el evento despues de actualizar Neckkito pero no hace nada.

Sigo probando...

Muchas gracias a los dos

Daludos blas
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 Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MsgBox ya existe solo una vez

Publicado por Neckkito (1157 intervenciones) el 03/08/2012 12:08:56
Hola, Blas:
Echa un vistazo a este ejemplo (que está explicado paso a paso), a ver si te puede ayudar: http://goo.gl/BOClC

Un saludo,

Neckkito
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

MsgBox ya existe solo una vez

Publicado por blas (143 intervenciones) el 04/08/2012 12:22:19
Hola Neckkito. Estoy probando con tu código pero me da errores.

D022 es mi campo de tipo texto que yo uso para el DNI

D023 es el siguiente campo que yo lo he puesto por el campo de tu código id

El código es el que pongo abajo pero me da el siguiente error en la línea

vD022B = DLookup("[D022]", "GENERAL", "[D022]=" & vD022)


Se ha producido el error 2001 en tiempo de ejecución

Yo creo que puede ser porque mi código D022 es de tipo texto y el tuyo es numérico.
Echale un vistazo a ver si localizas el error. Gracias.

Saludos. Blas.

Private Sub D022_AfterUpdate()
'D022 = D022 & "-" & LetraNif(D022)
Dim vD022, vD022B As Variant
vD022 = Me.D022.Value

If IsNull(vD022) Then Exit Sub

vD022B = DLookup("[D022]", "GENERAL", "[D022]=" & vD022)

If vD022B = D022 Then
MsgBox "El valor introducido ya existe", vbInformation, "AVISO"
Me.D022.Value = Null
Me.D023.SetFocus
Me.D022.SetFocus
End If
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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MsgBox ya existe solo una vez

Publicado por Neckkito (1157 intervenciones) el 04/08/2012 12:48:40
Hola, Blas:

Si tu campo es de tipo texto la condición del DLookup debe ir entre comillas simples.

Es decir, que la línea de código te debería quedar así:

vD022B = DLookup("[D022]", "GENERAL", "[D022]='" & vD022 & "'")

Te lo vuelvo a escribir espaciado para que lo veas mejor (espero que se pueda ver espaciado en el mensaje):

vD022B = DLookup("[D022]", "GENERAL", "[D022]= ' " & vD022 & " ' ")

A ver si con esto se te arregla.

Ya me dirás.

Un saludo,

Neckkito
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

MsgBox ya existe solo una vez

Publicado por blas (143 intervenciones) el 04/08/2012 17:16:30
Hola Neckkito.

¡Genial! Eso era. Ahora si, funciona de maravilla.

Tu, Mi Menda y Marcos, sois unos genios, me habeis ayudado mucho siempre que lo he necesitado. Un saludo Neckkito. He aprovecahdo este mensaje para recordar a Mi Menda y Marcos que son otros genios como tu. Muchas gracias.

Ah, al salir no me guardaba el dato, asi que he quitado la línea Me.D022.SetFocus para conservarlo porque solo necesito que me lo recordara.

Saludos. Blas
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