Poner campos a cero en un formulario

Tengo un formulario con 4 campos: Apellidos, Nombre, Piso y letra.

Tengo un Botón de comando "CmdNvo" que me crea una macro( que no entiendo) pero me pone los campos en blanco. Hasta aquí todo bien.

Que quiero: Que cuando inserte los campos "Piso" y "Letra" me indique que ya existe esta combinación y no me permita grabar.

¿Es posible?. Les agradecería si no es posible me lo indicasen para intentar otras opciones.

1 Respuesta

Respuesta
1

La opción sencilla y sin complicarse es poner en la tabla los dos campos como clave principal (seleccionas los dos campos en vista diseño, y pulsas en el botón de clave principal), pero no sé si tu tabla ta tiene clave y podrás usar este método.

Otra forma sería:

En el evento "Despues de actualizar" de tu campo letra (y suponiendo que siempre pongas el piso antes que la letra) generas este código:

Private Sub Letra_AfterUpdate()

If Nz(Me.Piso,"")=""  Then

Msgbox "No has escrito un piso"

Exit Sub

End If

If Nz(Me.Letra,"")=""  Then

Msgbox "No has escrito una letra"

Exit Sub

End If

Dim miValor as Variant

miValor=DLookUp("Apellidos","TuTabla","Piso='" & Me.Piso & "' AND Letra='" & Me.Letra & "'")

If Not Isnull(miValor) Then 'Si no es nulo es porque ya está registrado

MsgBox "Piso y Letra ya registrados"

Me.Piso=Null

Me.Letra=Null

End If

End Sub

Cambia TuTabla por el nombre de tu tabla, te debiera funcionar.

Bueno días: Ya vi tu respuesta. El campo piso lo tenía como número y lo he cambiado a texto. Hay un problema. Los campos se actualizan al pulsar el CmdSalir y se graba el registro. Si dejo de poner el piso o la letra, se muestra los MsgBox y se sale guardando el registro. Algo tengo mal.

Debería no poder guardar el registro hasta que los datos estén correctos.

¿Qué me falta?

Entonces tienes que poner ese código dentro del código que tienes en tu botón, antes de hacer que se guarde el registro, algo así:

Private Sub CmdSalir_Click()
If Nz(Me.Piso,"")=""  Then
Msgbox "No has escrito un piso. Se cancelará el guardado"
Exit Sub
End If
If Nz(Me.Letra,"")=""  Then
Msgbox "No has escrito una letra. Se cancelará el guardado"
Exit Sub
End If
Dim miValor as Variant
miValor=DLookUp("Apellidos","TuTabla","Piso='" & Me.Piso & "' AND Letra='" & Me.Letra & "'")
If Not Isnull(miValor) Then 'Si no es nulo es porque ya está registrado
MsgBox "Piso y Letra ya registrados. Se cancelará el guardado"
Me.Piso=Null
Me.Letra=Null
Exit Sub
End If
'Aquí irá el código que ya tienes
End Sub

Lo siento pero no me funciona.

Aquí te dejo un enlace para que me digas que es lo que está mal. Gracias

https://www.dropbox.com/sh/jwa6vw616gq1l8z/AADdynV3LiuqhYjvAfGGZ-Z-a?dl=0

Tienes varias cosas mal:

1º/ Al estar en formulario basado en la tabla los registros se guardan automáticamente (tendrías que poner un Me. Undo antes del DoCmd. Close de tu botón para deshacer los cambios, y aún así, no te garantizo que algún dato no se te borre del registro)

2º/ El código lo has puesto dos veces seguidas.

Creo que lo más sencillo es que optes por una clave compuesta, por los dos campos Piso y letra, como te sugería en una de las opciones. Es lo más sencillo y te aseguras de dos cosas: que no repitas piso y letra, y que al dar de alta un registro tengas que poner ambos valores, pues de otra forma no se te guarda el registro. http://www.filebig.net/files/JUTX8NnMKM 

Yo probé la primera opción cunado me contestaste la 1ª vez, pero no la utilicé por no saber cómo poner las 2 claves al mismo tiempo. Ahora que lo he averiguado funciona perfectamente como comprobé en la Bd que me remitiste pero al aplicarlo a la verdadera, en la que tengo ya datos metidos me indica un error de que "el índice o clave principal no puede contener un valor Null". He mirado en los foros y no me aclaro. ¿Debo empezar de nuevo? ¿hay alguna manera de evitarlo? Perdona por la torpeza.

Soy yo de nuevo, perdona por la torpeza pero ya encontré el error, tenía un registro grabado sin el campo "Piso".

Ya está solucionado el problema.

Muchas gracias por todo

Nada que disculpar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas