Access: Validar Textbox y accionar en respuesta

Tengo una BdD con almanaques. Como puedo tener repetidas, necesito cargar la cantidad en un textbox. El valor mínimo es 2 y quiero que si se ingresa 1, 0 o nada muestre mensaje indicando "¿Hay varios elementos en existencia?" y se responda "Sí" o "No". Si responde que Sí, se pimpie el valor erróneo y se establezca el foco en el campo en custión. Y si responde que NO, se limpie y se deshabilite el campo en cuestión, y se situe el foco en el siguiente campo (ANO para el año del almanaque).

Hice este código en "Después de actualizar" del campo CANT (cantidad de almanaques):

Private Sub CANT_BeforeUpdate(Cancel As Integer)

If Form!CANT.Value = 1 Or Value = 0 Or Value = Empty Then

Dim Respuesta As Integer

Respuesta = MsgBox("El valor ingresado no corresponde." & vbCrLf & _

"¿Hay una existencia de varios elementos iguales?", vbExclamation + 4, "Error en el valor")

If Respuesta = 6 Then

MsgBox "Ingrese un valor 2 (dos) como mínimo.", vbInformation + 0, "Valor requerido"

Form!CANT.SetFocus

Form!CANT.Value = Empty
Else

Form!CANT.Value = Empty

Form!CANT.Enabled = False

End If

End If

End Sub

Al hacer el uso del campo, me arroja error:

RESPONDE SÍ:

2108: Debe guardar el campo antes de ejecutar la acción IrAControl, el método gotocontrol o el método SetFocus.

RESPONDE NO:

2115: La macro o función establecida para la propiedad RegladeValidación o AntesdeActualizar de este campo impide que Almanaques guarde los datos del campo.

Es importante que los cambios NO se guarden porque podría anularos con un botón "CANCELAR", pero anula el registro modificado, no lo borra.

¿Cómo puedo hacer?

1 respuesta

Respuesta
1

Coloca el código en el evento al salir. No en después de actualizar. Prueba con eso y me cuentas.

Modifiqué el código porque me establecía el valor 0 y necesitaba el campo sin datos.

Ahora quedó así:

Private Sub CANT_Exit(Cancel As Integer)
If Form!CANT.Value = 1 Or Value = 0 Or Value = Empty Then
Dim Respuesta As Integer
Respuesta = MsgBox("El valor ingresado no corresponde." & vbCrLf & _ "¿Hay una existencia de varios elementos iguales?", vbExclamation + 4, "Error en el valor")
If Respuesta = 6 Then
MsgBox "Ingrese un valor 2 (dos) como mínimo.", vbInformation + 0, "Valor requerido"
Form!CANT.Value = Null
Form!CANT.SetFocus
Else
Form!CANT.Value = Null
Form!CANT.Enabled = False
Form!DUPLI.Value = False
End If
End If
End Sub

Ahora el problema es que pasa al campo siguiente en el orden, cuando necesito que vuelva a tomar foco CANT en caso de responder SI y el siguiente si responde NO (pues la activación de ese dato se anuló al no tener más de uno de ese objeto).

¿Cómo hago para que en caso de ser SI respete el Form!CANT.SetFocus?

Otra cosa que sucede: aún cuando el valor es correcto (mayor o igual a 2), me muestra la consulta como si se hubiera ingresado algo mal.

Entonces en el siguiente campo coloque el código en el evento al recibir el enfoque el código que ha escrito. Saludos.

Si deseas puedo solucionar tu problema de una enviame la base de datos a mi correo [email protected] y lo soluciono de una

Lo corregí de otro modo pero se ha presentado un problema que me obliga a crear una nueva BdD. Access 2013 está tan inestable que me ha dañado el trabajo y no lo he podido reparar así que tengo que retomar desde cero creando otro archivo.

Igual gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas